为了账号安全,请及时绑定邮箱和手机立即绑定

如何针对值测试多个变量?

如何针对值测试多个变量?

幕布斯7119047 2019-05-20 15:59:06
我正在尝试创建一个函数,将多个变量与一个整数进行比较,并输出一个由三个字母组成的字符串。我想知道是否有办法将其翻译成Python。所以说:x = 0y = 1z = 3mylist = []if x or y or z == 0 :     mylist.append("c")if x or y or z == 1 :     mylist.append("d")if x or y or z == 2 :     mylist.append("e")if x or y or z == 3 :      mylist.append("f")这将返回一个列表["c", "d", "f"]这样的事情可能吗?
查看完整描述

5 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

你误解了布尔表达式的工作原理; 他们不像英语句子一样工作,并猜测你在谈论所有名字的相同比较。您正在寻找:

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

xy以其他方式自行评估(False如果0True否则)。

您可以使用针对元组的包含测试来缩短它:

if 1 in (x, y, z):

或者更好的是:

if 1 in {x, y, z}:

使用aset来利用常量成本隶属度测试(in无论左手操作数是多少,都需要一定的时间)。

使用时or,python将运算符的每一侧视为单独的表达式。表达式x or y == 1首先被视为布尔测试x,如果为False,y == 1则测试表达式。

这是由于运营商的优先权。的or操作者具有比较低的优先级==的测试,因此后者被评估第一

但是,即使不是这种情况,并且表达式x or y or z == 1实际上被解释为(x or y or z) == 1相反,这仍然不会按照您的预期执行。

x or y or z将评估第一个参数'truthy',例如not False,numeric 0或empty(有关Python在布尔上下文中认为false的详细信息,请参阅布尔表达式)。

因此对于值x = 2; y = 1; z = 0x or y or z将解析为2,因为这是参数中第一个类似真值的值。那2 == 1就是False,即使y == 1True

这同样适用于逆; 针对单个变量测试多个值; x == 1 or 2 or 3因为同样的原因会失败。使用x == 1 or x == 2 or x == 3x in {1, 2, 3}


查看完整回答
反对 回复 2019-05-20
?
皈依舞

TA贡献1851条经验 获得超3个赞

使用字典结构更容易解决您的问题:


x = 0

y = 1

z = 3

d = {0: 'c', 1:'d', 2:'e', 3:'f'}

mylist = [d[k] for k in [x, y, z]]


查看完整回答
反对 回复 2019-05-20
?
GCT1015

TA贡献1827条经验 获得超4个赞

写作的直接方式x or y or z == 0

if any(map((lambda value: value == 0), (x,y,z))):
    pass # write your logic.

但我不认为,你喜欢它。:)这种方式很难看。

另一种方式(更好)是:

0 in (x, y, z)

BTW很多ifs可以写成这样的东西

my_cases = {
    0: Mylist.append("c"),
    1: Mylist.append("d")
    # ..}for key in my_cases:
    if key in (x,y,z):
        my_cases[key]()
        break


查看完整回答
反对 回复 2019-05-20
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

如果你非常懒,可以将值放在数组中。如

list = []list.append(x)list.append(y)list.append(z)nums = [add numbers here]letters = [add corresponding letters here]for index 
in range(len(nums)):
    for obj in list:
        if obj == num[index]:
            MyList.append(letters[index])
            break

您也可以将数字和字母放在字典中并执行它,但这可能比简单的语句更复杂。这就是你想要更加懒惰的结果:)

还有一件事,你的

if x or y or z == 0:

将编译,但不是以你想要的方式编译。当你只是在if语句中放一个变量时(例子)

if b

程序将检查变量是否为空。编写上述语句的另一种方法(更有意义)是

if bool(b)

Bool是python中的一个内置函数,它基本上执行验证布尔语句的命令(如果你不知道那是什么,那么你现在正试着在你的if语句中做:) :)

我发现的另一种懒惰方式是:

if any([x==0, y==0, z==0])


查看完整回答
反对 回复 2019-05-20
  • 5 回答
  • 0 关注
  • 804 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信