本文介绍了如何对多个值测试一个变量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图创建一个函数,将多个变量比较一个整数,并输出一个三个字母的字符串。我想知道是否有一种方法来将它翻译成Python。所以说:

   

这是由于。 或运算符的优先级比 == 测试的优先级低,因此,

但是,即使这不是的情况,表达式 x或y或z = = 1 实际上被解释为(x或y或z)== 1 ,但这仍然不会做你期望的做。



x或y或z 会计算第一个参数为truey不是 False ,数字0或空(请参阅,以了解Python在布尔上下文中认为是什么的细节。)



所以对于 x = 2; y = 1; z = 0 , x或y或z 会解析为 2 参数中的第一个真实值。那么 2 == 1 将是 False ,即使 y == 1 将 True 。


I'm trying to make a function that will compare multiple variables to an integer and output a string of three letters. I was wondering if there was a way to translate this into Python. So say:

x = 0
y = 1
z = 3
Mylist = []

if x or y or z == 0 :
    Mylist.append("c")
elif x or y or z == 1 :
    Mylist.append("d")
elif x or y or z == 2 :
    Mylist.append("e")
elif x or y or z == 3 : 
    Mylist.append("f")

which would return a list of

["c", "d", "f"]

Is something like this possible?

解决方案

You misunderstand how boolean expressions work; they don't work like an English sentence and guess that you are talking about the same comparison for all names here. You are looking for:

if x == 1 or y == 1 or z == 1:

x and y are otherwise evaluated on their own (False if 0, True otherwise).

You can shorten that to:

if 1 in (x, y, z):

or better still:

if 1 in {x, y, z}:

using a set to take advantage of the constant-cost membership test (in takes a fixed amount of time whatever the left-hand operand is).

When you use or, python sees each side of the operator as separate expressions. The expression x or y == 1 is treated as first a boolean test for x, then if that is False, the expression y == 1 is tested.

This is due to operator precedence. The or operator has a lower precedence than the == test, so the latter is evaluated first.

However, even if this were not the case, and the expression x or y or z == 1 was actually interpreted as (x or y or z) == 1 instead, this would still not do what you expect it to do.

x or y or z would evaluate to the first argument that is 'truthy', e.g. not False, numeric 0 or empty (see boolean expressions for details on what Python considers false in a boolean context).

So for the values x = 2; y = 1; z = 0, x or y or z would resolve to 2, because that is the first true-like value in the arguments. Then 2 == 1 would be False, even though y == 1 would be True.

这篇关于如何对多个值测试一个变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-27 16:40