虽然循环打印响应时,它不应该 - Python
问题描述:
我的程序包含一个简单的'Y/N'输入。我在代码中放置了一个while循环,当输入的输入不是'Y/N'或其任何变化时,它应该会响应。虽然循环打印响应时,它不应该 - Python
import time
count_d = 10
load = input('Import modules? Y/N')
if load == 'Y' or load == 'y' or load == ' Y' or load == ' y':
print('Modules loading...')
while count_d >0:
print(count_d)
count_d = count_d-1
time.sleep(1)
print('Modules loaded')
elif load == 'N' or load == 'n' or load == ' N' or load == ' n':
print('Shutdown initiated.')
sys.exit()
while load != 'Y' or load != 'y' or load != ' Y' or load != ' y' and load != 'N' or load != 'n' or load != ' N' or load != ' n':
print('This answer does not correspond with the desired output')
load = input('Import modules? Y/N')
if load == 'Y' or load == 'y' or load == ' Y' or load == ' y':
print('Modules loading...')
while count_d >0:
print(count_d)
count_d = count_d-1
time.sleep(1)
print('Modules loaded')
break
elif load == 'N' or load == 'n' or load == ' N' or load == ' n':
print('Shutdown initiated.')
break
当我进入一个接受输入,该程序响应它需要的地方,而且打印while循环,在那里它被设计成只与一个接受的输入识别它的响应。我做了什么错误,所以在我做对了的时候它会释放错误的输出?
答
您可以简化检查,以便不必应付这么多繁琐的条件:
if load.strip().lower() == 'y':
和
elif load.strip().lower() == 'n':
和
while load.strip().lower() not in ['y', 'n']:
巧合的是,这最后一个将解决您的错误,这是怎么回事,因为你在的地方and
使用or
。
答
您需要将while循环中的'或'语句更改为'和'语句。
这个例子应该告诉你为什么...
而(a或b!): //运行在一个是真实的,但b为假的情况下
而(和!b): //运行,而A和b都是不正确的
+0
这不是有效的Python语法。至少,将'!'切换到'不'。尽管如此,更多有用的信息可以添加到*显示*为什么是这种情况。 –
答
无论是否满足条件,都执行if
和elif
块以下的语句。
为了确保这些语句执行只有当if
和elif
的条件不满足,else
必须使用
包括在else
块while
循环:
import time
count_d = 10
load = input('Import modules? Y/N')
if load == 'Y' or load == 'y' or load == ' Y' or load == ' y':
print('Modules loading...')
while count_d >0:
print(count_d)
count_d = count_d-1
time.sleep(1)
print('Modules loaded')
elif load == 'N' or load == 'n' or load == ' N' or load == ' n':
print('Shutdown initiated.')
sys.exit()
else:
while load != 'Y' or load != 'y' or load != ' Y' or load != ' y' and load != 'N' or load != 'n' or load != ' N' or load != ' n':
print('This answer does not correspond with the desired output')
load = input('Import modules? Y/N')
if load == 'Y' or load == 'y' or load == ' Y' or load == ' y':
print('Modules loading...')
while count_d >0:
print(count_d)
count_d = count_d-1
time.sleep(1)
print('Modules loaded')
break
elif load == 'N' or load == 'n' or load == ' N' or load == ' n':
print('Shutdown initiated.')
break
答
( A == B或C == D)==(A!= B)和(C!= D)
将while循环放在一个'''else'''块中,所以它不会被输入如果第一个条件中的任何一个是真的。由于while循环中的'''或'''条件,它会进入它。你会希望所有的''和''是。除非我误解你的意图... – mgarey
@mgarey谢谢,它现在有效。你能否进一步解释为什么你需要把它放在另一个块? –
@ matt-333,请参阅我的回答,https://*.com/a/44637757/2306662 – nikpod