循环应该在我输入YES或NO后结束,但它一直询问“AREYouDONEYES/NO”输入以下代码有什么问题
def Cable_df():
YES = 'YES'
NO = 'NO'
v = ''
while v != YES:
x = input('Enter STARTING splice of cable').upper()
y = input('Enter TERMINAL splice of cable ').upper()
Z = input('Enter cable SIZE ').upper()
v = input('ARE YOU DONE YES/NO ')
while v != YES or v != NO:
print('Must answer YES/NO')
v = input('ARE YOU DONE YES/NO ')
5条答案
按热度按时间4nkexdtk1#
您面临的问题是在条件中使用的逻辑:
v != YES
的计算结果为... ...假,但是v != NO
计算为... ...真*或使
False or True
的值为True,并且循环无限运行。正确的输入不会停止循环,因为“NO”也会使'NO' != YES
的值为True。换句话说,您需要将while循环中的条件更改为另一个条件,该条件的计算结果为False,以便用户输入正确。
由于接受用户输入“是”和“否”,此类条件将为:
上面的while条件等价于使用Python关键字
in
的条件,它检查一个值是否出现在列表中:上述指定条件的方法使代码看起来像英语,通常不需要解释它做了什么,因为它将循环 “,而v不等于包含YES和NO的列表中的值*”。如果这是一个优势,取决于程序员的英语说得有多好,以及使用这种方法编写和记录循环中断条件是否听起来有吸引力。
另一种说法是:
因为
not ( A or B )
==not A and not B
。理解布尔逻辑的一个常见问题是单词 or 和 and 在口语中的使用方式。例如,如果你被问到:“Do you want A or do you want B?”,你认为你只能选择其中一个,如果你两个都选,布尔逻辑
or
也可以。vxbzzdmp2#
在你的第二圈
你在检查
v != YES
还是v != NO
,任何一个条件都足以满足检查,并保持循环继续,所以它会一直继续,直到v
同时是YES
和NO
。也许你是想写
这将确保只有当x1M5N1X * 和 * x1M6N1X时循环才继续,因此一旦x1M7N1X是x1M8N1X或x1M9N1X,循环将停止。
sshcrbum3#
使用break结束循环。例如
while v == YES or v == No: break
2q5ifsrm4#
问题出在第二个while循环中,因为条件“v!= YES or v!= NO”总是True。要正确检查输入是“YES”还是“NO”,您应该使用“v!= YES and v!= NO”。下面是更正后的代码:
yyyllmsg5#
对于已写入continue的while循环,必须满足以下条件:
v不等于“是”
v不等于“否”
这两个条件将始终被选中,因此,因为v只能被赋予一个值-这些选项中的一个将始终为真
使用IN语句
进一步参考:https://www.w3schools.com/python/ref_keyword_in.asp