2

我的代码在这里: 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() 函数。

4

2 回答 2

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相应地更改条件

于 2013-06-16T03:15:05.630 回答
4

如果按以下方式检查,最好这样做:

if repeat in ("y","yes"):
    ...
elif repeat in ("n","no"):
    ...

通过将所有可能的值保存在一个元组(列表)中进行比较,使代码可读。此外,如果要比较的值更多,您可以创建一个元组(或列表)来存储这些值并与存储的值进行比较。像下面这样说可以使代码更具可读性:

acceptance_values = ('y','yes')
    ...
if repeat in acceptance_values :
    ...
于 2013-06-16T03:26:43.337 回答