1
again = True

while(again == True):

    yn = input("Do you want to do it again? (y or n)").lower()

    if(yn == 'y' or 'yes'):
        again == True
    elif(yn == 'n' or 'no):
        again == False

如何使此代码工作?当我运行它时,它总是会成真.. =/

4

6 回答 6

6

让我们从头开始:

while(again == True):

  1. 你不需要这里的括号

  2. 你不需要那个== True位。again就足够了,因为它将具有 True 的布尔值。

if(yn == 'y' or 'yes'):

  1. 再一次,不需要括号。

  2. 该行代码被翻译为if (yn == 'y') or ('yes'):. 'yes'正如所考虑的那样,这将始终为真True(不是空字符串)

  3. 在python中,你需要做if yn == 'y' or yn == 'yes':

  4. 或者你可以做if yn in ('y', 'yes')

again == True

  1. ==是为了比较。=用于作业

  2. 这发生在您的else块中。

于 2013-10-03T03:20:40.160 回答
1

在程序的最后 4 行中,您没有指定again值为 true,而是在检查是否again等于True/ False

==与 完全不同=

于 2013-10-03T03:14:42.967 回答
1

这不起作用:

if (yn == 'y' or 'yes'):
    # ...
elif(yn == 'n' or 'no):

正确的方法是:

if yn in ('y' or 'yes'):
    # ...
elif yn in ('n' or 'no):

此外,在分配错误的条件内,请使用单个=. 它们应该如下所示:

again = True
# ...
again = False
于 2013-10-03T03:17:52.500 回答
0

if(yn == 'y' 或 'yes'): # ----

上述语句的值始终为真,与“yn”的值无关,因为“或”的右侧在您的情况下始终为真。所以它永远不会执行 else 部分。因此,为避免这种情况,您必须将“yn”的值与每种可能性进行比较。一种简单的方法是

if(yn == 'y' or yn == 'yes'):
    again == True
elif(yn == 'n' or yn == 'no):
    again == False
于 2013-10-03T04:29:14.310 回答
0

您将相等运算符==与赋值运算符混淆了=。该语句yn == 'y' or 'yes'也有问题,因为右侧是一个非空字符串,它True在布尔上下文中计算为。

仅仅为了处理循环终止而声明一个变量不是 Pythonic。我会将您的代码完全重写为:

while True:
    yn = input("Do you want to do it again? (y or n)").lower()
    if yn in ('n','no'):
        break
于 2013-10-03T03:14:53.617 回答
-1

你的 if else 语句应该是

如果 xxx:再次 = 真 elif yyy:再次 = 假

注意 = 和 == 之间的区别。

于 2013-10-03T03:14:56.587 回答