caspar1 发表于 2022-1-4 23:57:42

Caesar 密碼 Python

我目前能想到的方式是一直用if跟else去更改每一個字母,但我不知道更簡潔的寫法怎麼去寫。

需求:
1.假設是以大寫字母去作為加密
2.能讓使用者自由輸入要加密的英文字串
3.要有要有input
4.能夠顯示加密跟解密

希望各位程式天才能教教我,正在努力學習

jackz007 发表于 2022-1-5 00:33:05

本帖最后由 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>

傻眼貓咪 发表于 2022-1-5 10:26:31

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

caspar1 发表于 2022-1-5 22:11:32

傻眼貓咪 发表于 2022-1-5 10:26
输入/输出结果:

不好意思能請問一下第一行在寫什麼嗎,我有點不太了解

傻眼貓咪 发表于 2022-1-5 22:29:31

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))

caspar1 发表于 2022-1-6 16:08:04

傻眼貓咪 发表于 2022-1-5 22:29
lambda 是匿名函数,如果将我的代码拆开来会变成:

太感謝你了,好詳細!

caspar1 发表于 2022-1-6 16:20:16

傻眼貓咪 发表于 2022-1-5 22:29
lambda 是匿名函数,如果将我的代码拆开来会变成:

不好意思我在請教一下,如果要解密的話是應該將什麼做更改

傻眼貓咪 发表于 2022-1-6 16:28:25

caspar1 发表于 2022-1-6 16:20
不好意思我在請教一下,如果要解密的話是應該將什麼做更改

不用更改,我的代码已经齐全解密或加密 2个功能

Caesar(文本) # key 默认 1,表示加密(文本字符往后移3位)
Caesar(文本, 0) # key 为 0,表示解密(文本字符往前移3位)

caspar1 发表于 2022-1-6 16:39:27

傻眼貓咪 发表于 2022-1-6 16:28
不用更改,我的代码已经齐全解密或加密 2个功能

Caesar(文本) # key 默认 1,表示加密(文本字符往后 ...

哇,真的非常感謝!!!

傻眼貓咪 发表于 2022-1-6 16:43:38

caspar1 发表于 2022-1-6 16:39
哇,真的非常感謝!!!

{:10_281:}
页: [1]
查看完整版本: Caesar 密碼 Python