我该怎么做才能使代码只移动字母而不是空格?

时间:2014-12-17 05:08:38

标签: python encryption

#get string and shift from user

string = input('Please enter a string to be ciphered: ')
shift = input('Please enter a shift amount between 0 and 25: ')

#strings are immutable so it must be converted to a list
s=list(string)

#now this will convert each character based on the shift

for i in range(0,len(s)):
    s[i]=chr(ord(s[i]) + int(shift))


print ("".join(s))

2 个答案:

答案 0 :(得分:1)

你应该调用方法str.alpha以确保所选元素在转移之前是一个字母

for i in range(0,len(s)):
    if elem.isaplha():
        s[i]=chr(ord(s[i]) + int(shift))

虽然,但是你在这里做了很多工作。为什么不使用理解表达式?

s = ''.join(chr(ord(elem) + shift) if elem.isalpha() else elem for elem in s)

或者如果你有足够的冒险精神

s = ''.join([elem, chr(ord(elem) + shift)][elem.isalpha()] for elem in s)

最后您是否检查了string.makestrans以及str.translate进行转换?

from string import maketrans, ascii_alpha
s = s.translate(maketrans(ascii_alpha[shift:] + string.ascii_alpha[:shift])

答案 1 :(得分:0)

您所要做的就是检查当前字符是否不是您要跳过的字符。

for i in range(0,len(s)):
    #If not a space, cipher this character.
    if s[i] != ' ':
        s[i]=chr(ord(s[i]) + int(shift))

但是,您的某个角色可能会被加密到一个空格,在这种情况下,在翻转密码时会跳过该角色。

此外,这样的简单密码至少不应被认为是安全的。