作为Python的新手,我正在研究的一件事是角色生成器。正如你可以从我抛出的代码中看到的那样,我正在努力进行种族选择。
########Race########
#.racechoose (label)
hero_race = input("What is your hero's race? (Human / Elf / Dwarf / Orc) Don't forget to capitalize! ")
if hero_race == 'Human':
print ("Humans are well-rounded, average characters. They have a bonus of + 1 to Speed and + 1 to Int.")
yn = input ("Do you want to be a Human (Y/N)? ")
if yn == 'y' or yn == 'Y':
profile['Race'] = "Human"
print ("Your hero", profile['Name'], "is a human.")
else:
#goto racechoose
elif hero_race == 'Elf':
print("Elves are very fast, and they have a bonus of + 2 to Speed.")
yn = input("Do you want to be an Elf? (y/n) ")
if yn == 'y' or yn == 'Y':
profile['Race'] = "Elf"
print("Your hero ", profile['Name'], "is an Elf.")
else:
#goto racechoose
elif hero_race == 'Dwarf':
print("Dwarves are small, but strong. Dwarves get a bonus of + 2 Muscle.")
yn = input("Do you want to be a Dwarf? (Y/N) ")
if yn == 'y' or yn =='Y':
profile['Race'] = 'Dwarf'
print("Your hero ", profile['Name'], "is a Dwarf.")
else:
#goto racechoose
else: #orc
print("Orcs are brute muscle. Orcs get a bonus of + 3 to Muscle, but - 1 to Int.")
yn = input("Do you want to be an Orc? (Y/N) ")
if yn == 'y' or yn == 'Y':
profile['Race'] = 'Orc'
print("Your hero ", profile['Name'], "is an Orc.")
else:
#goto racechoose
请忽略goto和标签注释 - 我刚刚停止使用blitzbasic,现在我正在尝试为python找到label和goto命令。
无论如何,我在elif英雄种族精灵系列上得到了“预期缩进的块”,我想知道如何正确地缩进这段代码。谢谢!
答案 0 :(得分:2)
出于某种原因,如果你要离开一个块(需要声明的块)为空,那么在那里使用pass
作为占位符。使用评论不会起作用。
else:
pass
来自docs:
pass
是一个空操作 - 当它被执行时,没有任何反应。它是 在语法上需要语句时用作占位符, 但是不需要执行任何代码,例如:
示例:
def f(arg): pass # a function that does nothing (yet)
class C: pass # a class with no methods (yet)
if yn == 'y' or yn == 'Y':
可以缩减为if yn.lower() == 'y':
答案 1 :(得分:1)
为什么不在这样的函数中提取常见的东西:
def get_race_description(race):
return {
'human': "Humans are well-rounded ...",
'elf': "Elves are very fast ...",
# all the other race descriptions
}.get(race.lower(), "WTF? I don't know that race")
def confirm_race_selection(race):
print (get_race-description(race))
yn = input ("Do you want to be {0} (Y/N)? ".format(race))
return (yn.lower() == 'y')
while True:
hero_race = input("What is your hero's race?")
if (confirm_race_selection(hero_race)):
profile['Race'] = hero_race
print ("Your hero {0} is {2}".format(profile['Name'], hero_race))
break
这段代码可以不使用break
重写,但我已经完成了很多重构,所以现在由你决定
答案 2 :(得分:0)
除了评论之外,您还需要其他内容,如果必须,请使用通行证。
最好是使用字典而不是嵌套的if语句,即如果你有一个配置文件键,文本输出,描述和使用默认的'victim'字典,那么代码会更清晰。