为何在while循环中使用OR运算符而非AND运算符?
为什么while循环用OR而不是AND?
有人曾简要向我解释过此问题,但我仍未理解。我原本认为,需要同时满足两个条件时应使用AND运算符,而OR运算符仅需满足其中一个条件即可。但为何如下示例代码的while循环中,要使用OR运算符来确保两个条件都被满足?
#DOUBLE == MEANS EQUALITY #SINGLE = MEANS ASSIGNMENT #THIS WILL BE THE LEGIT USER CHOICE WHERE OUR CHOICE HAS TO BE #A NUMBER THAT IS WITHIN RANGE, SO TWO VARIABLES TO MEET BIG BOY def my_choice (): #VARIABLES SECTION #INITIALS choice = 'wrong' accepted_range = range(1,10) within_range = False #Just like our choice we have to give the false answer here to keep #the while loop- why? I dont know yet, will update #TWO CONDITIONS TO CHECK #1-MAKE SURE ITS AN ACTUAL NUMBER #2-MAKE SURE ITS WITHIN THE RANGE #CODE TIME while choice.isdigit()==False or within_range == False: choice = input('Please enter a value bettwen 1-9, Thanks ') #Digit check if choice.isdigit() == False: print('sorry mate {} is not a digit'.format(choice)) #Range Check #If we have passed the digit check, we can use it in our range check if choice.isdigit() == True: #remember that input returns a string ya? if int(choice) in accepted_range: within_range = True print('Well done, {} is defintely a number in range'.format(choice)) else: within_range = False print('Sorry, you have picked a number, just not in range')
解答
核心逻辑是:while循环在条件为True时持续执行,我们的目标是让用户反复输入,直到输入完全符合要求(是数字且在范围内)。
先拆解循环里的两个条件:
choice.isdigit() == False:输入不是数字(不合格)within_range == False:输入的数字不在范围内(不合格)
只要这两个“不合格”的情况里任意一个成立,就说明输入不符合要求,需要继续循环让用户重新输入。用OR连接这两个条件,正好表达「只要有一个不合格,就继续循环」的逻辑。
如果换成AND,就变成「只有当输入既不是数字,同时又不在范围内时才循环」——这显然错误:比如用户输入了一个超出范围的数字,此时choice.isdigit() == False是False,AND条件整体为False,循环会直接停止,无法完成校验。
从逻辑定律来讲,我们要的是「输入不满足『是数字且在范围内』就循环」,而**「不满足(A且B)」等价于「不满足A 或者 不满足B」**(德摩根定律),这就是为什么这里要用OR而不是AND。
内容的提问来源于stack exchange,提问作者shaz
相关产品推荐
相关产品推荐

