这个三元运算符有什么问题?

时间:2014-04-22 12:25:53

标签: python

for i in str1:
    (newstr += chr(ord(i)+2)) if i.isalpha() else (newstr += i)

似乎对+ =运算符感到悲伤。我知道我的两个变量都是字符串,所以我不明白它为什么不能连接它们

3 个答案:

答案 0 :(得分:5)

尝试以下方法:

for i in str1:
    newstr += (chr(ord(i)+2) if i.isalpha() else i)

修改

来自python documentation

conditional_expression ::=  or_test ["if" or_test "else" expression]
expression             ::=  conditional_expression | lambda_expr

正如@flornquake指出的那样,作业var += value是一个陈述,而不是表达。

答案 1 :(得分:3)

三元运算符a if cond else b使用表达式,但newstr += chr(ord(i)+2)是一个语句。

在这种情况下你需要使用if语句:

for i in str1:
    if i.isalpha():
        newstr += chr(ord(i)+2)
    else:
        newstr += i

答案 2 :(得分:2)

Python中的三元运算符需要表达式(如newstr + i),但您尝试使用语句(newstr += i等同于newstr = newstr + i)。

更正代码的一种方法是:

newstr = ''
for i in str1:
  newstr += chr(ord(i)+2) if i.isalpha() else i

但是,不应该以这种方式连接字符串。

更好的方法是:

newstr = ''.join(chr(ord(c)+2) for c in str1 if c.isalpha() else c)

还有另一种方式(仅适用于ASCII字符!):

import string
fro = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
to = 'cdefghijklmnopqrstuvwxyz{|ABCDEFGHIJKLMNOPQRSTUVWX[\\'
t = string.maketrans(fro, to)
newstr = str1.translate(t)