当前位置: 首页 > 知识库问答 >
问题:

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

田文景
2023-03-14

我试着做一个函数,它将把多个变量与一个整数进行比较,并输出一个三个字母的字符串。我想知道有没有办法把这个翻译成Python。于是说:

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

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"]

这样的事情可能发生吗?

共有3个答案

拓拔坚
2023-03-14

正如Martijn Pieters所述,正确且最快的格式是:

if 1 in {x, y, z}:

使用他的建议,您现在将拥有单独的if-语句,这样Python将读取每个语句,无论前者是true还是false。例如:

if 0 in {x, y, z}:
    mylist.append("c")
if 1 in {x, y, z}:
    mylist.append("d")
if 2 in {x, y, z}:
    mylist.append("e")
...

这是可行的,但如果您喜欢使用字典(请参阅我在此所做的工作),您可以创建一个初始字典,将数字映射到您想要的字母,然后使用for循环:

num_to_letters = {0: "c", 1: "d", 2: "e", 3: "f"}
for number in num_to_letters:
    if number in {x, y, z}:
        mylist.append(num_to_letters[number])
都建树
2023-03-14

使用字典结构可以更容易地解决您的问题,例如:

x = 0
y = 1
z = 3
d = {0: 'c', 1:'d', 2:'e', 3:'f'}
mylist = [d[k] for k in [x, y, z]]
欧浩淼
2023-03-14

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

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

否则,xy将自行计算(false如果0true否则)。

您可以通过对元组进行包含测试来缩短此时间:

if 1 in (x, y, z):

或者更好的是:

if 1 in {x, y, z}:

使用来利用恒定开销的成员资格测试(中的无论左边的操作数是什么都需要固定的时间)。

当您使用时,python将运算符的每一边都视为单独的表达式。表达式x或y==1首先被视为x的布尔测试,然后如果为False,则测试表达式y==1

这是由于运算符优先。运算符的优先级低于==测试,因此先对后者进行评估。

但是,即使情况并非如此,并且表达式x或y或z==1实际上被解释为(x或y或z)==1,这仍然不能达到您期望的效果。

x或y或z将计算为“truthy”的第一个参数,例如不是false,数值0或空(有关Python在布尔上下文中认为什么是false的详细信息,请参阅布尔表达式)。

因此对于值x=2;y=1;z=0x或y或z将解析为2,因为这是参数中第一个类似true的值。则2==1将是false,即使y==1将是true

反之亦然;针对单个变量测试多个值;x==1或2或3将由于相同的原因而失败。在{1,2,3}中使用x==1或x==2或x==3x。

 类似资料:
  • 我试图做一个函数,将多个变量比较为一个整数,并输出一个三个字母的字符串。我想知道是否有一种方法把它翻译成Python。所以说:

  • 我试图创建一个函数,将多个变量与一个整数进行比较,并输出一个由三个字母组成的字符串。我想知道是否有办法将其翻译成Python。那么说: 它将返回以下列表: 这样的事情可能吗?

  • 问题内容: Python如何将多个变量与一个值进行比较?,例如: 我希望返回一个列表: 问题答案: 方法1 方法2 使用元组或列表 方法3 最好是使用set集合

  • 问题内容: 在AJAX请求之后,有时我的应用程序可能返回一个空对象,例如: 如何检查情况呢? 问题答案: ECMA 5+: Note, though, that this creates an unnecessary array (the return value of keys). Pre-ECMA 5: jQuery: lodash: Underscore: Hoek ExtJS Angula

  • 本文向大家介绍如何对一个页面进行测试相关面试题,主要包含被问及如何对一个页面进行测试时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1、UI测试:页面布局、页面样式检查、控件长度是否够长;显示时,是否会被截断;支持的快捷键,Tab键切换焦点顺序正确性等。 2、功能测试:页面上各类控件的测试范围,测试点。结合控件的实际作用来补充检查点: 比如, 密码框是否*显示, 输入是否做trim处理等。

  • 我在scala上,我有多个针对不同类(testsuites)的测试文件,每一个都使用testcontainers(来自同一脚本的init)。 当我启动项目中的所有测试时,所有测试都失败了(由于testContainers导致与数据库的连接出现问题)。 当我分别启动测试时,所有的测试都成功了。 有没有办法为多个测试文件(testsuites)只启动一个容器?似乎只对同一文件中的测试起作用。 @Mat

  • 问题内容: 我是硒测试的新手。我想针对Internet Explorer,Firefox,Opera和Chrome在多种浏览器上运行。我必须遵循什么方法。大家能否建议我这是最好的过程。 硒Web驱动程序是否支持多种浏览器??? 我们已经编写了登录脚本。它可以分别在Firefox,Chrome和Internet Explorer中成功运行。但我想按顺序为那些多个浏览器运行它。 问题答案: 在此之前,

  • 我需要针对给定的XSD文件验证多个XML文件。问题是XSD由两个文件组成。它们是嵌套的,尽管我知道哪个是第一个(其他文件的“父”)。在XML文件中,我使用命名空间来定义子节点在哪个XSD中定义