for i in str1:
(newstr += chr(ord(i)+2)) if i.isalpha() else (newstr += i)
似乎对+ =运算符感到悲伤。我知道我的两个变量都是字符串,所以我不明白它为什么不能连接它们
答案 0 :(得分:5)
尝试以下方法:
for i in str1:
newstr += (chr(ord(i)+2) if i.isalpha() else i)
修改强>:
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)