python 有人能给我解释一下下面两行的区别吗?[duplicate]

qhhrdooz  于 2023-02-21  发布在  Python
关注(0)|答案(1)|浏览(132)
    • 此问题在此处已有答案**:

Why does "a == x or y or z" always evaluate to True? How can I compare "a" to all of those?(8个答案)
17小时前关闭。

if genre == 'Social Networking' or 'Games':

以上结果与以下结果不同:

if genre == 'Social Networking' or  genre == 'Games':

有人知道为什么会这样吗?如果需要的话,下面是完整的代码,这只是我正在做的一个python初学者课程的dataquest。

opened_file = open('AppleStore.csv')
from csv import reader
read_file = reader(opened_file)
apps_data = list(read_file)

games_social_ratings = []
for row in apps_data[1:]:
    rating = float(row[7])
    genre = row[11]
    # Complete code from here
    if genre == 'Social Networking' or == 'Games':
        games_social_ratings.append(rating)
avg_games_social = sum(games_social_ratings)/len(games_social_ratings)

print (avg_games_social)
vx6bjr1n

vx6bjr1n1#

唯一能让这句话有意义的方法是:

if genre == 'Social Networking' or 'Games':

你可能会认为这意味着类似这样的东西(但它实际上并没有这样求值):

if genre == ('Social Networking' or 'Games'):

在这里,'Social Networking' or 'Games'将是or对两个字符串值的操作,就好像它们是布尔值一样,并且空字符串''不是真的(即,评估为False),而非空字符串 * 是 * 真的(即,评估为True)。
因此,'Social Networking' or 'Games'True,代码将与以下代码相同:

if genre == (True):

这不是你想要的。or是一个逻辑运算符,它接受两个布尔值,如果其中一个或两个操作数都是True,则计算结果为True。它并不意味着英语中“or”的所有含义。
然而,正如评论中所指出的,这里真正发生的是:

if (genre == 'Social Networking') or 'Games':

因为==or绑定得更强,所以genre == 'Social Networking'首先被求值。如果它求值为True,则整个表达式的结果将是Trueor的第二个操作数甚至没有计算)。如果计算结果为False(即,genre不是'Social Networking'),则整个表达式求值为'Games',这是正确的,因此整个表达式为True
无论哪种情况,结果都是True,无论genre的值是多少。

相关问题