在Python中嵌套'If'函数

时间:2013-06-25 17:42:07

标签: python function nested

作为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英雄种族精灵系列上得到了“预期缩进的块”,我想知道如何正确地缩进这段代码。谢谢!

3 个答案:

答案 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'字典,那么代码会更清晰。