所以我的问题是:我在 while 循环中使用 if-elif-else 子句创建了而。我提示用户输入y或n,不区分大小写。但我希望循环保持循环,直到它们输入y,Y,n,N来打印出相应的字符串。但是当我输入任何字符串或整数时,它会像我想要的那样循环,但当我输入y,Y,n,N时,它仍然保持循环并且不打印我想要的字符串。
var = input("Enter Y/N:")
while var != 'y' or var != 'Y' or var != 'n' or var != 'N' :
if var == 'y' or var == 'Y' :
print("You said yes")
break
elif var == 'n' or var == 'N':
print("You said no")
break
else:
input("Enter Y/N:")
答案 0 :(得分:2)
根据您的帖子,您似乎希望有机会根据用户的输入跳过循环。为此,您可以使用此算法:
var = input("Enter Y/N:")
if var in ['y', 'Y']:
print("You said yes")
elif var in ['n', 'N']:
print("You said no")
else:
while True :
var = input("Enter Y/N:")
if var in ['y', 'Y']:
print("You said yes")
break
elif var in ['n', 'N']:
print("You said no")
break
为什么不用var not in ['y', 'Y', 'n', 'N']
之类的条件写而?
var = input("Enter Y/N:")
if var in ['y', 'Y']:
print("You said yes")
elif var in ['n', 'N']:
print("You said no")
while var not in ['y', 'Y', 'n', 'N']:
var = input("Enter Y/N:")
if var in ['y', 'Y']:
print("You said yes")
elif var in ['n', 'N']:
print("You said no")
我们可以将其他语句切换为更明确的而语句,这也会有效,但正如您所看到的,我们的代码似乎有更多的分界点。 唯一的问题是我们通过冗余例程增加了切点。
在我看来,在循环中实现输入更好,更具可读性。
for python 3.x
while True :
var = input("Enter Y/N:")
if var in ['y', 'Y']:
print("You said yes")
break
elif var in ['n', 'N']:
print("You said no")
break
for python 2.x
while True :
var = raw_input("Enter Y/N:")
if var in ['y', 'Y']:
print("You said yes")
break
elif var in ['n', 'N']:
print("You said no")
break
现在我们有一个非常小的代码做同样的事情。
我也注意到你只想阅读{y,n}字母。区分大小写的定义仅对用户有用,案例将产生相同的答案。因此,您可以降低或提高所有输入以简化条件
for python 3.x
while True :
var = input("Enter Y/N:").lower()
if var == 'y':
print("You said yes")
break
elif var == 'n':
print("You said no")
break
for python 2.x
while True :
var = raw_input("Enter Y/N:").lower()
if var == 'y':
print("You said yes")
break
elif var == 'n':
print("You said no")
break