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

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

它似乎对 += 运算符感到困惑。虽然我知道我的变量都是字符串,但我不明白为什么它不会只是将它们连接起来。

3个回答

5

请尝试以下方法:

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

Edit:

From python documentation:

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

正如@flornquake所指出的那样,赋值var += value是一个语句而不是表达式。


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
在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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接