如何在python中解决caesar密码的问题?

2024-09-28 05:28:41 发布

您现在位置:Python中文网/ 问答频道 /正文

wheel = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
wlen = len(wheel) - 1

c = input("Type a word: ").upper()
key = int(input("Key: "))

encrypted = ''


for x in c:
    f = wheel.find(x) + key 
    if x == " ":
        encrypted = encrypted + " "
    if f > wlen:
        f1 = f - wlen - 1
        encrypted = encrypted + wheel[f1] 
    if f < wlen:
        encrypted = encrypted + wheel[f]

print(encrypted)

这个代码不起作用,我找不到原因。我需要帮助

例如,“我不擅长编码”给出"M DWYGO DEX DGSHMRK" 在空格后面的所有单词中都有一个额外的D。”MDWYGODEXDGSHMRK” 谢谢你


Tags: keyforinputleniftypeupperencrypted
2条回答

你需要使用elif

if x == " ":
    encrypted = encrypted + " "
elif f > wlen:
    f1 = f - wlen - 1
    encrypted = encrypted + wheel[f1]
elif f < wlen:
    encrypted = encrypted + wheel[f]

原因:

当您有一个空格时,find返回-1,因此添加键您得到了3,因此您输入第一个if,因为它是一个空格,但是如果在最后一个3<25,那么您添加了wheel[f],这是一个D,与elif一起,您将只满足一个条件

问题在于您的条件检查,因为多个条件同时计算为True,这是不需要的

for x in c:
    f = wheel.find(x) + key 
    if x == " ":
        encrypted = encrypted + " "
    elif f > wlen:
        f1 = f - wlen - 1
        encrypted = encrypted + wheel[f1] 
    else:
        encrypted = encrypted + wheel[f]

相关问题 更多 >

    热门问题