在递增通过三元运营商不同的变量循环
我试图添加到基于测试不同的变量,在我的for循环:在递增通过三元运营商不同的变量循环
for i in range(alist.__len__()):
if alist[i] is not blist[i]:
ascore +=1 if alist[i] > blist[i] else bscore+=1
print(ascore,bscore)
此代码不能正常工作。我所知道的是,if条件不适用于整个赋值(如果条件是增加ascore),它反而适用于我的值1(如果条件为1,则增加ascore)。我更喜欢类似于第一个的功能。我可以在这里做什么?我明白,如果elsif可以很容易地解决这个问题,但我更关心三元运算符(一行条件)在python中的工作方式。谢谢!
不幸的是,你不能使用三元运算符。顾名思义,这是一个运营商,所以左侧和右侧都必须是表达式。然而,与许多其他语言不同,Python assignments are statements,因此它们不能用于表达式的地方。
的解决方案,为你正确地指出,就是用一个正常的条件语句:如果你需要增加只有两个变量
for i in range(len(list)):
if alist[i] is not blist[i]:
if alist[i] > blist[i]:
ascore +=1
else:
bscore +=1
print(ascore, bscore)
- 你可以通过字典做到这一点,用下面的代码:
scores = {
True: 0, # ascore
False: 0 # bscore
}
for i in range(len(alist)):
if alist[i] is not blist[i]:
scores[alist[i] > blist[i]] += 1
print(scores)
或者相同,但更加清晰:
scores = {
'ascore': 0,
'bscore': 0
}
for i in range(len(alist)):
if alist[i] is not blist[i]:
scores['ascore' if alist[i] > blist[i] else 'bscore'] += 1
print(scores)
,你也应该确保你使用=和正常的if语句
for i in range(len(alist)):
if alist[i]!=blist[i]:
if alist[i]>blist[i]:
ascore+=1
else:
bscore+=1
print(ascore,bscore)
如果两个变量指向同一个对象,那么'is'将返回True,如果变量所指向的对象相同,则返回'=='。此操作员有不同的用途 –
如果你不使用增强assignmeng坚持,你可以像这样做:
ascore, bscore = (ascore + 1, bscore) if alist[i] > blist[i] else (ascore, bscore + 1)
感谢ShadowRanger指点我的错误(我错过了括号)。
您的操作员优先顺序错误。你只是试图给两个元素分配一个三元组;保证'ValueError'。你想要:'ascore,bscore =(ascore + 1,bscore)if alist [i]> blist [i] else(ascore,bscore + 1)',但你有效地写道:'ascore,bscore = ascore + 1 bscore if alist [i]> blist [i] else ascore),bscore + 1' – ShadowRanger
Python中的赋值不是表达式(不像C/C++),所以你不能在这里使用三元运算符(它只能用于表达式)。 –