python 无论b是否等于空格,elif条件语句不触发

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
for b in translate:
        if b=='1'or'2':
            numstr=numstr+b
        elif b==' ':
            numlist.append(numstr)
            numlist.append(' ')
            numstr=''

print(numlist) #输出的值是[]

运行结果及报错内容

输出结果为[],没有报错

我的解答思路和尝试过的方法

重新翻过append(),列表的相关内容,测试后发现numstr正常输出,输出值为12 212 ,(有空格),但无论b是否等于空格,elif后的代码块都不执行

我想要达到的结果

合并字符串,中间用空格隔开,因为不让重复输入相同的符号,所以想要的结果写在下方

numstr=''
numlist=[]
translate=['1','2',' ','2','1','2',' ']
for b in translate:
        if b=='1'or'2':
              numstr=numstr+b
        elif b==' ':
              numlist.append(numstr)
              numlist.append(' ')
              numstr=''
print(numlist)   #输出的值是[]
#想达到的结果:numlist=['12',' ','121',' ']
if b=='1'or'2'

当python遇到该判别式时,优先级关系应该是这样的:

if (b=='1') or ('2')

虽然左边我们无法断定它的返回值,但是右边的'2'永远都会被看做为True
此时表达式等效于? or True,所以整个判别式的返回值永远为True
由于你使用了if ... elif ...结构
如果相对来说位置靠前的条件返回值为True,那么只会执行该结构体中的代码,后面的一律不会被执行(条件也不会判断)
因此即使表达式b==' '成立,该条件的结构体也不会被执行
改正为

if b=='1'or b=='2':
    if b=='1'or'2': 不对,

应该是

    if b=='1' or b=='2':

因为你这个 if b=='1' or '2': 判断逻辑有问题,不是你想象的b等于'1' 或者等于'2'。
b=='1' or '2'是用 or 分隔的
b=='1'

'2'
两个条件表达式。
其中'2'是一个单独的条件表达式,'2'在条件判断时永远为真, or 两边是任何一边为真结果就是真。
所以b=='1' or '2'表达式的结果就是永远为真, 后面的elif条件语句也就不会执行了。

正确的写法是
if b=='1' or b=='2':
要简写可以这样子
if b in {'1','2'}:
这里用集合比用列表稍快一些。

你题目的解答代码如下:

numstr=''
numlist=[]
translate=['1','2',' ','2','1','2',' ']
for b in translate:
        if b=='1' or b=='2': #修改
            numstr=numstr+b
        elif b==' ':
            numlist.append(numstr)
            numlist.append(' ')
            numstr=''
print(numlist)   #输出的值是[]
#想达到的结果:numlist=['12',' ','121',' ']

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

if b=='1'or'2'

因为if条件恒成立,不会执行后面的elif分支。
这个if逻辑是
表达式1) b=='1'
或者
表达式2) '2'
表达式2是单独的,跟b没关系,所以'2'是恒成立的,所以if条件恒成立。
你的写法应该是少了b==

if b=='1'or b=='2'