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")
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")
which would return a list of:
["c", "d", "f"]
30条答案
按热度按时间ljsrvy3e1#
用Python语言表示伪代码最典型的方式是:
70gysomp2#
现在我们可以使用a作为[行,列]选择符,它的作用就像任何(...)条件:
bvuwiixz3#
首先,更正
OR
条件:您需要说:
原因是“or”将条件拆分成单独的逻辑部分。你最初陈述的方式,这些部分是:
最后的部分很好-检查z==0,例如-但前两个部分基本上只说
if x
和if y
。因为整数总是计算为True
,除非它们是0,这意味着当x
或y
不等于0时,条件的第一部分总是True
(在y的情况下总是等于0,因为您有y = 1
,这会导致整个条件(取决于OR
的工作方式)始终是True
。为了避免这种情况,您需要确保条件的所有部分(
OR
的每一边)本身都有意义(可以通过假装OR
语句的另一边不存在来做到这一点)。这样您就可以确认是否正确定义了OR
条件。您可以逐个编写语句,如下所示:
这意味着带有
OR
关键字的正确Mergin应该是:第二,如何解决问题:
基本上,您希望检查是否有任何变量与给定的整数匹配,如果匹配,则在一对一Map中为其分配一个与其匹配的字母。您希望对特定的整数列表执行此操作,以便输出为字母列表。你会这样做:
同样,您可以使用列表理解来更快地获得相同的结果:
cgvd09ve4#
不带If的用法示例:
4uqofj5v5#
这里还有一种方法:
它是列表理解和任何关键字的混合。
7vux5j2d6#
问题
而测试多个值的模式
可读性非常好,并且在许多情况下都可以工作,但有一个陷阱:
但我们想要的是
解决方案
前面表达式的一个推广是基于ytpillai的答案:
它可以写成
尽管此表达式返回正确的结果,但其可读性不如第一个表达式:-(
1u4esq0p7#
or
不像explained by this answer那样工作。而一般的答案将使用
对于特定的问题,这不是最好的方法。在您的例子中,您正在进行重复测试,因此有必要组成这些变量的“集合”:
我们可以使用字典来简化这一过程--这将产生相同的值:
或者,如果
mylist
的顺序是任意的,则可以循环值并将它们与Map进行匹配:xghobddn8#
您可以通过两种方式来开发它
或
7gyucuyw9#
你可以把这个统一起来
在一个变量中。
将我们的条件更改为:
产出:
gkn4icbw10#
这会对你有帮助。
5m1hhzi411#
在不使用DICT的情况下,尝试此解决方案:
并给予:
fnvucqvd12#
您可以使用字典:
yhqotfr813#
看起来你在造某种凯撒密码。
一种更为普遍的方法是:
产出
我不确定这是否是代码所希望的副作用,但输出的顺序将始终是排序的。
如果这是您想要的,则可以将最后一行更改为:
vwkv1x7d14#
使用一个值测试多个变量:
if 1 in {a,b,c}:
使用一个变量测试多个值:
if a in {1, 2, 3}:
brvekthn15#
它可以很容易地完成,因为