为什么在带有dict的if语句中使用关键字'和'会出现逻辑错误? [重复]

问题描述 投票:-1回答:2

这个问题在这里已有答案:

我有一个空字典,我从用户输入的字母和值列表中分配键

valuesDict = {}
letters = ['S', 'u', 'v', 'a', 't']
i = 0
while i < 5:
    newValue = input('Enter ' + letters[i] + ' ')
    if newValue != '':
        valuesDict.update({letters[i]: newValue})
    i = i + 1

和一个减少if语句显示我的问题,打印一个对应于字典中的项目的数字

if 'S' and 'v' not in valuesDict.keys():
    print('1')
elif 'u' and 'v' not in valuesDict.keys():
    print('2')

如果我输入u,a和t的值,它会正确输出'1'

Enter S
Enter u 2
Enter v
Enter a 5
Enter t 7
1

但是,当我输入S的值时,语句'1'的elif部分的a和t被输出,当它意味着'2'时

Enter S 2
Enter u 
Enter v 
Enter a 5
Enter t 7
1

为什么会发生这种情况,我如何解决这个问题并在将来避免这种情况?

python python-3.x dictionary if-statement
2个回答
0
投票

你得到:

>>> 'S' and 'v'
'v'

并且只检查v而不是S

您需要检查两者:

if ('S' not in valuesDict.keys()) and ('v' not in valuesDict.keys()):

例:

>>> 'S' and 'v' not in 'xS'  # equivalent to: 'v' not in 'xS' 
True
>>> ('S' not in 'xS') and ('v' not in 'xS')
False

1
投票

语法if 'S' and 'v' not in valuesDict.keys()在逻辑上不等同于if 'S' not in valuesDict.keys() and 'v' not in valuesDict.keys()

© www.soinside.com 2019 - 2024. All rights reserved.