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'

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

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632