我使用 unicode 的凯撒密码有问题
Problem with my caesar cipher using unicode
这是我 class 的 python 任务,我正在尝试使用 unicode 制作凯撒密码。如果它通过 z,我已经将小写字母环回到 a。但我似乎无法让大写字母工作。
这是我的函数代码:
def rot(text, key):
cypher_text = ''
for char in text:
if char.isalpha():
num = ord(char)
if (num + key) > 122 and 90:
x = (num + key) - 122 or 90
cypher_text += chr(x + ord('a') - 1)
elif num + key <= 122 and 90:
cypher_text += chr(num + key)
else:
cypher_text += char
return cypher_text
例如,如果我输入 Hello!并输入 19 作为旋转键
它打印这个 [xeeh!
这里有什么我遗漏的吗?
你可以这样试试-
def rot(text, key):
cypher_text = ''
for char in text:
if char.isalpha():
num = ord(char)
if char.isupper():
num = (num - ord('A') + key) % 26 + ord('A')
else:
num = (num - ord('a') + key) % 26 + ord('a')
cypher_text += chr(num)
else:
cypher_text += char
return cypher_text
为了计算,您可以从第一个字母(即'A'或'a')开始获得位移。然后将其添加到键中并使用 % 26 环绕。就像假设 char
是 'H' 并且 key
是 19,所以在添加位移和键后它将大于 26 . % 26
将环绕到适当的位移,如果 key
本身大于 26,它也会有所帮助。再次添加 A
或 a
将获得正确的加密字符
这是我 class 的 python 任务,我正在尝试使用 unicode 制作凯撒密码。如果它通过 z,我已经将小写字母环回到 a。但我似乎无法让大写字母工作。
这是我的函数代码:
def rot(text, key):
cypher_text = ''
for char in text:
if char.isalpha():
num = ord(char)
if (num + key) > 122 and 90:
x = (num + key) - 122 or 90
cypher_text += chr(x + ord('a') - 1)
elif num + key <= 122 and 90:
cypher_text += chr(num + key)
else:
cypher_text += char
return cypher_text
例如,如果我输入 Hello!并输入 19 作为旋转键
它打印这个 [xeeh!
这里有什么我遗漏的吗?
你可以这样试试-
def rot(text, key):
cypher_text = ''
for char in text:
if char.isalpha():
num = ord(char)
if char.isupper():
num = (num - ord('A') + key) % 26 + ord('A')
else:
num = (num - ord('a') + key) % 26 + ord('a')
cypher_text += chr(num)
else:
cypher_text += char
return cypher_text
为了计算,您可以从第一个字母(即'A'或'a')开始获得位移。然后将其添加到键中并使用 % 26 环绕。就像假设 char
是 'H' 并且 key
是 19,所以在添加位移和键后它将大于 26 . % 26
将环绕到适当的位移,如果 key
本身大于 26,它也会有所帮助。再次添加 A
或 a
将获得正确的加密字符