Caesar 密碼 Python
我目前能想到的方式是一直用if跟else去更改每一個字母,但我不知道更簡潔的寫法怎麼去寫。需求:
1.假設是以大寫字母去作為加密
2.能讓使用者自由輸入要加密的英文字串
3.要有要有input
4.能夠顯示加密跟解密
希望各位程式天才能教教我,正在努力學習 本帖最后由 jackz007 于 2022-1-5 00:46 编辑
def Crypt(s , x):
r = ''
d = 3 if x == 0 else -3
for c in s:
if 'A' <= c <= 'Z':
r += chr(ord('A') + (ord(c) - ord('A') + d) % 26)
elif 'a' <= c <= 'z':
r += chr(ord('a') + (ord(c) - ord('a') + d) % 26)
else:
r += c
return r
x = input() . strip()
if x:
s1 = Crypt(x , 0) # 对 x 加密
s2 = Crypt(s1 , 1) # 对 s1 解密
print(s1)
print(s2)
运行实况:
D:\00.Excise\Python>Python x.py
Hello , World !
Khoor , Zruog !
Hello , World !
D:\00.Excise\Python> Caesar = lambda s, key = 1: ''.join()
script = Caesar(input())
print(script)
print(Caesar(script, 0))输入/输出结果:Banana @&$%#}{][]} AAA ZZZ aaa zzz 123456
Edqdqd @&$%#}{][]} DDD CCC ddd ccc 123456
Banana @&$%#}{][]} AAA ZZZ aaa zzz 123456 傻眼貓咪 发表于 2022-1-5 10:26
输入/输出结果:
不好意思能請問一下第一行在寫什麼嗎,我有點不太了解 caspar1 发表于 2022-1-5 22:11
不好意思能請問一下第一行在寫什麼嗎,我有點不太了解
lambda 是匿名函数,如果将我的代码拆开来会变成:
def Caesar(s, key = 1): # key = 1 为往后移 3 位,否则往前移 3 位
res = ''
for i in s:
if i.isalpha():
a = ord(i) # 字符对应的 ASCII 编号
b = 32*i.islower() # 因为大小写字母 ASCII 相差 32
c = 20*key # key = 1 就必须加20,否则加零,这是数学公式,有关取模,区间,这里很难解说
x = chr(((a - (42 + b + c))%26) + 65 + b)
res = res + x
else:
res = res + i
return res
script = Caesar(input())
print(script)
print(Caesar(script, 0)) 傻眼貓咪 发表于 2022-1-5 22:29
lambda 是匿名函数,如果将我的代码拆开来会变成:
太感謝你了,好詳細! 傻眼貓咪 发表于 2022-1-5 22:29
lambda 是匿名函数,如果将我的代码拆开来会变成:
不好意思我在請教一下,如果要解密的話是應該將什麼做更改 caspar1 发表于 2022-1-6 16:20
不好意思我在請教一下,如果要解密的話是應該將什麼做更改
不用更改,我的代码已经齐全解密或加密 2个功能
Caesar(文本) # key 默认 1,表示加密(文本字符往后移3位)
Caesar(文本, 0) # key 为 0,表示解密(文本字符往前移3位) 傻眼貓咪 发表于 2022-1-6 16:28
不用更改,我的代码已经齐全解密或加密 2个功能
Caesar(文本) # key 默认 1,表示加密(文本字符往后 ...
哇,真的非常感謝!!! caspar1 发表于 2022-1-6 16:39
哇,真的非常感謝!!!
{:10_281:}
页:
[1]