例如,hello, world
应转换为ifmmo, xpsme
。 (a
- > b
,b
- > c
,...,z
- > a
)
在C中,可以简单地编写print ch+1;
来进行移位。但是,在尝试使用Python时,我得到:
>>> [i+1 for i in "hello, world"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
答案 0 :(得分:2)
看看这个
a = [chr(ord(i)+1) for i in "hello, world"]
print ''.join(map(str,a))
或
for i in "hello, world":
if i.isalpha():
b.append(chr(ord(i)+1))
elif i == ' ' or i == ',':
b.append(i)
print ''.join(map(str,b))
答案 1 :(得分:0)
以下是在字符串中移位字符的功能。我也在更改两个函数中的逻辑,以便更清晰。
使用列表理解:
import string
alph_string = string.ascii_letters # string of both uppercase/lowercase letters
def shift_string(my_string, shift):
return ''.join([chr(ord(c)+shift) if c in alph_string else c for c in my_string])
使用自定义函数(使用普通逻辑):
import string
my_alphas = string.ascii_lowercase # string of lowercase alphabates
def shift_string(my_string, shift):
new_string = ''
for i in my_string:
if i in my_alphas:
pos = my_alphas.index(i) + shift
if pos > len(my_alphas):
pos -= len(my_alphas)
new_string += my_alphas[pos]
else:
new_string += i
return new_string
示例运行:
# with shift 1
>>> shift_string(my_string, 1)
'ifmmp, xpsme'
# with shift 2
>>> shift_string(my_string, 2)
'jgnnq, yqtnf'