我正在使用python 2.7,我对python很新。我想问为什么我的代码中的行被跳过了,虽然我没有看到它们的原因。
我的代码如下所示:
def add_client:
code for adding client
def check_clients:
code for listing out client info
modes = {'add': add_client, 'check': check_clients}
while True:
while True:
action = raw_input('Input Action: \n').lower()
if action in modes or ['exit']:
break
print 'Actions available:',
for i in modes:
print i.title() + ',',
print 'Exit'
if action in modes:
modes[mode](wb)
if action == 'exit':
break
当我运行代码并输入不在模式列表中的操作时,它不会打印出'可用的操作:添加,检查,退出'似乎只是跳过如下所示。
Input Action:
k
Input Action:
如果我将代码更改为下面所示的代码,则按预期工作:
modes = {'add': add_entries, 'check': check_stats}
while True:
while True:
mode = raw_input('Input Action: \n').lower()
if mode not in modes:
print 'Actions available:',
for i in modes:
print i.title() + ',',
print 'End/Exit'
if mode in modes or ['end', 'exit']:
break
if mode in modes:
modes[mode](wb)
if mode in ['end', 'exit']:
break
输出:
Input Action:
k
Actions available: Add, Check, End/Exit
根据我的理解,我认为当if语句为false时,将跳过if语句中的代码,并且应该运行下面的代码,但由于某种原因,这似乎不是这里的情况。 。是否有理由或我对if语句的理解不正确?
答案 0 :(得分:2)
无论action in modes or ['exit']
的值如何,条件True
的评估结果为action
。它读作(action in modes) or (['exit'])
(因此您将or
运算符应用于操作数action in modes
和['exit']
)。非空列表['exit']
在布尔上下文中求值为True
,因此or
返回True
。建议您在此处使用action in modes or action == 'exit'
来实现目标。