函数如果只接受一个输入

时间:2013-06-16 03:08:55

标签: python function

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

2 个答案:

答案 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 :
    ...