我的代码的if语句遇到了不需要的行为。当我在while loop
内调用条件语句时,无论提供哪个输入,都只调用第一个条件。我希望正确的输入调用正确描述的函数,然后继续回到循环的开头,要求用户进行另一个选择。
color_modes = ['sangria', 'ham', 'nightHawk']
print color_modes
def sangria():
my_range = list(range(20))
print my_range
def ham():
print 'foo'
def nightHawk():
print 'nightHawk'
while True:
user_input = input('...')
if 'sangria':
ham()
continue
if 'ham':
sangria()
continue
if 'nightHawk':
nightHawk()
continue
else:
break
此外,当我使用语法时:
if user_input == 'ham':
而不是简写if 'ham:
,条件不起作用。先感谢您。
答案 0 :(得分:1)
if 'ham'
将始终通过,因为非空字符串始终为True
。
相反,您必须使用==
运算符检查是否相等。
正确的代码是:
color_modes = ['sangria', 'ham', 'nightHawk']
print color_modes
def sangria():
my_range = list(range(20))
print my_range
def ham():
print 'foo'
def nightHawk():
print 'nightHawk'
while True:
user_input = input('...')
if user_input == 'sangria':
ham()
continue
if user_input == 'ham':
sangria()
continue
if user_input == 'nightHawk':
nightHawk()
continue
else:
break
答案 1 :(得分:1)
if 'sangria':
只是if bool('sangria'):
的简写,总是评估为if True
,因此无论输入是什么,第一件事就是
您需要比较输入字符串。没有简写/替代方式来编写它像Java switch case语句
顺便说一下,这段代码看起来很奇怪。
if 'sangria':
ham()
continue
if 'ham':
sangria()
continue
如果我理解你想要的东西,你可以创建一个功能图。
funcs = {"ham": ham, "sangria" : sangria, "nightHawk" : nightHawk}
user_input = input()
funcs[user_input]() # use the string to get the function object, then call it
答案 2 :(得分:1)
在Python 2中
user_input = input('...')
尝试评估用户的输入。如果您输入一个字符串,例如ham
,Python将尝试计算将失败的表达式ham
,如下所示(除非在作用域中有一个类似命名的变量)。
>>> input('...')
...ham
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'ham' is not defined
您可以使用raw_input()
来修复它:
user_input = raw_input('...')
然后使用字符串比较:
while True:
user_input = raw_input('...')
if user_input == 'ham':
ham()
elif user_input == 'sangria':
sangria()
elif user_input == 'nightHawk':
nightHawk()
else:
break
此代码还使用elif
来避免不必要的continue
语句。
更好的方法是使用字典将用户输入映射到关联的函数:
input_map = {'ham': ham, 'sangria': sangria, 'nightHawk': nightHawk}
while True:
func = input_map.get(raw_input('...'))
if func is None:
break
func()