#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))
答案 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))
但是,您的某个角色可能会被加密到一个空格,在这种情况下,在翻转密码时会跳过该角色。
此外,这样的简单密码至少不应被认为是安全的。