我的代码在这里:http://pastebin.com/bK9SR031。我正在Codecademy上做PygLatin练习并被带走了,所以大部分都是......初学者。
很抱歉这真的很长。问题是,当[Y / N]问题出现时,无论我输入什么,它都表现得好像我输入“是”。
相关摘录之一:
def TryAgain():
repeat = raw_input("\nStart over?[Y/N] ").lower()
if repeat == "y" or "yes" :
print "OK.\n"
PygLatin()
elif repeat == "n" or "no" :
raw_input("\nPress ENTER to exit the English to Pig Latin Translator.")
sys.exit()
else:
TryAgain()
无论我输入什么,它都会打印“OK”。然后再次启动PygLatin()函数。
答案 0 :(得分:6)
您的第一个if
声明中的条件:
if repeat == "y" or "yes":
print "OK.\n"
PygLatin()
无论True
的值如何,总是评估为repeat
。这是因为"Yes"
不是空字符串(它的布尔值是True
),因此or
总是导致True
。修复它的一种方法是:
if repeat == "y" or repeat == "yes":
print "OK.\n"
PygLatin()
另一个(如下面的sateesh提到的)是:
if repeat in ("y","yes"):
print "OK.\n"
PygLatin()
您还应该相应地更改else
条件
答案 1 :(得分:4)
如果以下方式检查,最好还是这样做:
if repeat in ("y","yes"):
...
elif repeat in ("n","no"):
...
通过在元组(列表)中保留所有可能的值进行比较可以生成代码 可读。此外,如果有更多值要与您比较,您可以创建 一个元组(或列表)来存储这些值并与存储的值进行比较 值。说下面的内容可以让代码更具可读性:
acceptance_values = ('y','yes')
...
if repeat in acceptance_values :
...