我的输出进入非字母值 python 3.4 凯撒密码
my output goes into non alphabetic values python 3.4 caesar cipher
user_m = input('enter message:')
user_k = int(input('enter offset key:'))
message = ''
for a in user_m:
r = ord(a)
r += user_k
message += chr(r)
print (message)
此代码通过将偏移密钥添加到消息来加密消息。它工作正常,但问题是输出有时会变成非字母值,有时不准确,例如
enter message:zyxabc
enter offset key:24
yz{
这是它何时起作用的示例
enter message:hello
enter offset key:5
mjqqt
如何让所有字符按字母顺序排列?
这是@abarnet 在评论中建议的第一个解决方案:
def encrypt(message, shift):
new = ''
for i in (ord(x) for x in message): #gets the ascii value of each letter in message
if 64 < i < 91: #uppercase
new += chr(65 + (i+shift-65)%26)
elif 96 < i < 123: #lowercase
new += chr(97 + (i+shift-97)%26)
return new
def decrypt(message, shift):
return encrypt(message, 26-shift)
user_m = input('enter message:')
user_k = int(input('enter offset key:'))
message = ''
for a in user_m:
r = ord(a)
r += user_k
message += chr(r)
print (message)
此代码通过将偏移密钥添加到消息来加密消息。它工作正常,但问题是输出有时会变成非字母值,有时不准确,例如
enter message:zyxabc
enter offset key:24
yz{
这是它何时起作用的示例
enter message:hello
enter offset key:5
mjqqt
如何让所有字符按字母顺序排列?
这是@abarnet 在评论中建议的第一个解决方案:
def encrypt(message, shift):
new = ''
for i in (ord(x) for x in message): #gets the ascii value of each letter in message
if 64 < i < 91: #uppercase
new += chr(65 + (i+shift-65)%26)
elif 96 < i < 123: #lowercase
new += chr(97 + (i+shift-97)%26)
return new
def decrypt(message, shift):
return encrypt(message, 26-shift)