我试图创建一个基于地牢的文本游戏。仅仅是为了娱乐和练习,但我遇到了Python没有关注if块的问题。奇怪的是,当我第一次输出它时它起作用了,但是一天之后它没有。它将所有条件都视为真实。
choosing_race = True
while choosing_race == True:
print("options: Human, Elf, Dwarf")
p['race'] = input("Choose Race: ",)
print(p['race'], choosing_race)
if p['race'] == "Elf" or "elf":
print()
print("Elves are nimble, both in body and mind, but their form is frail. They gain Bonuses to Intelligence and Dexterity and a Penalty to Constitution")
print()
confirm_race = input("Are you an Elf? ",)
if confirm_race == "yes" or "Yes":
p['int_mod_r'] = 2
p['dex_mod_r'] = 2
p['con_mod_r'] = -2
choosing_race = False
elif confirm_race == "no" or "No":
print()
print("ok, select a different race")
else:
print()
print("Could not confirm, try again")
p [race]输入显示正常,但我可以输入任何内容(例如duck),就好像我输入了elf一样。当我要求确认时,它总是返回是。我想我必须在那里写错字,但我无法找到它。我重写了所有的缩进但仍然没有运气。我将尝试重新构建功能,这可能会有所帮助。与此同时,我很想知道这里出了什么问题,所以我可以在将来阻止它。谢谢。 (我使用的是Python 3,在我的Nexus 5手机上就是重要的情况)
答案 0 :(得分:4)
您没有从
这样的行获得您期望的行为if p['race'] == "Elf" or "elf":
在这种情况下,“elf”每次评估为true。你想改为写
if p['race'] == "Elf" or p['race'] == "elf":
或更简洁
if p['race'] in ["Elf", "elf"]:
或
if p['race'].upper() == "ELF":