for i in str1:
(newstr += chr(ord(i)+2)) if i.isalpha() else (newstr += i)
它似乎对 += 运算符感到困惑。虽然我知道我的变量都是字符串,但我不明白为什么它不会只是将它们连接起来。
for i in str1:
(newstr += chr(ord(i)+2)) if i.isalpha() else (newstr += i)
它似乎对 += 运算符感到困惑。虽然我知道我的变量都是字符串,但我不明白为什么它不会只是将它们连接起来。
请尝试以下方法:
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
是一个语句而不是表达式。
a if cond else b
适用于表达式,但是 newstr += chr(ord(i)+2)
是一条语句。for i in str1:
if i.isalpha():
newstr += chr(ord(i)+2)
else:
newstr += i
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)
import string
fro = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
to = 'cdefghijklmnopqrstuvwxyz{|ABCDEFGHIJKLMNOPQRSTUVWX[\\'
t = string.maketrans(fro, to)
newstr = str1.translate(t)