如何使用Python按照ascii顺序移动字符

时间:2016-10-26 11:01:19

标签: python arrays string character ascii

例如,hello, world应转换为ifmmo, xpsme。 (a - > bb - > 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

2 个答案:

答案 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'