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',' ']
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
if b=='1'or'2'
因为if条件恒成立,不会执行后面的elif分支。
这个if逻辑是
表达式1) b=='1'
或者
表达式2) '2'
表达式2是单独的,跟b没关系,所以'2'是恒成立的,所以if条件恒成立。
你的写法应该是少了b==
if b=='1'or b=='2'