Python 函数,如果只接受一个输入

Python 函数,如果只接受一个输入,python,function,Python,Function,我的代码在这里:。我在Codecademy上做PygLatin练习时被冲昏头脑了,所以大部分是。。。初学者 对不起,时间太长了。问题是,当出现[Y/N]问题时,无论我键入什么,它的行为都好像我输入了“是” 相关摘录之一: def TryAgain(): repeat = raw_input("\nStart over?[Y/N] ").lower() if repeat == "y" or "yes" : print "OK.\n" PygLati

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

第一个
if
语句中的条件:

 if repeat == "y" or "yes":
    print "OK.\n"
    PygLatin()
始终计算为
True
,而不考虑
repeat
的值。这是因为
“Yes”
不是空字符串(它的布尔值为
True
),因此
总是导致
True
。解决此问题的一种方法是:

if repeat == "y" or repeat == "yes":
    print "OK.\n"
    PygLatin()
另一个(如sateesh在下面提到的)是:


您还应相应地更改
其他
条件

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

if repeat in ("y","yes"):
    ...
elif repeat in ("n","no"):
    ...
通过将所有可能的值保留在元组(列表)中进行比较,代码 可读的。此外,如果要与更多值进行比较,则可以创建 用于存储这些值并与存储的值进行比较的元组(或列表) 价值观比如说,使用下面的方法可以使代码更具可读性:

acceptance_values = ('y','yes')
    ...
if repeat in acceptance_values :
    ...

如果
不是函数。谢谢,它现在可以工作了。需要澄清的是,
len(str)>0的字符串在
if
语句中等同于True?有关真值和假值的更多信息,请参阅手册中的。
acceptance_values = ('y','yes')
    ...
if repeat in acceptance_values :
    ...