Python:Caesar密码加密

Python:Caesar密码加密,python,encryption,shift,Python,Encryption,Shift,大家好,我有个问题。为什么下面的代码不产生任何输出或错误 这是一个加密和解密用户代码的代码 alpha = ['a','b','c','d','e','f', 'g','h','i','j','k','l', 'm','n','o','p','q','r', 's','t','u','v','w','x', 'y','z'] shift = range(26) def user_info(): info = input("\nPress 'e'

大家好,我有个问题。为什么下面的代码不产生任何输出或错误

这是一个加密和解密用户代码的代码

alpha = ['a','b','c','d','e','f',
     'g','h','i','j','k','l',
     'm','n','o','p','q','r',
     's','t','u','v','w','x',
     'y','z']

shift = range(26)

def user_info():
    info = input("\nPress 'e' to encrypt or 'd' to decrypt: ").lower()
    if info == 'e' or 'd':
       return info

def user_message():
    code = input("What is your message?: ")
    return code

def user_shift():
     shift = int(input("What is your shift number?: "))
     while True:
         if shift == int(shift):
             return shift

def True_Message(info, code, shift):

    if info[0] == 'd':     #This encrypts the code 
         shift = -shift    

    for letter in code:
        if letter in alpha:
        alpha_2 = ord(letter) + shift
        secret_message = ""
    if alpha_2 in range (0, len(alpha)):
        final_mix = chr(alpha)
        secret_message += final_mix

return secret_message

info = user_info()
code = user_message()
shift = user_shift()
print(True_Message(info, code, shift))
没有任何错误,所以我不知道出了什么问题。我对这种加密技术还不熟悉,我不确定这是否在正确的轨道上,有什么想法吗?多谢各位

更新


抱歉,我希望代码能够根据用户的选择对代码进行加密和解密。Python是一种缩进敏感语言。到处都有缩进错误

你怎么能说“没有任何错误”——你在运行脚本吗?python解释器将准确地告诉您它们在哪里。当我运行脚本时:

C:\Users\Jonathon\temp>python caesar.py
文件“caesar.py”,第22行
回程班次
^
缩进错误:应为缩进块
因此,您的第一个错误是:

def user_shift():
     shift = int(input("What is your shift number?: "))
     while True:
         if shift == int(shift):
         return shift              # ---> Should be indented one more level

您需要检查缩进和
运算符的使用情况:

alpha = ['a','b','c','d','e','f',
     'g','h','i','j','k','l',
     'm','n','o','p','q','r',
     's','t','u','v','w','x',
     'y','z']

shift = range(26)

def user_info():
    info = input("\nPress 'e' to encrypt or 'd' to decrypt: ").lower()
    if info in ('e', 'd'): # 'or' does not work how you think it does
        return info

def user_message():
    code = input("What is your message?: ")
    return code

def user_shift():
     while True:
         shift = int(input("What is your shift number?: "))
         if shift == int(shift):
             return shift

def True_Message(info, code, shift):

    if info[0] == 'd':     #This encrypts the code 
         shift = -shift    

    for letter in code:
        if letter in alpha:
            alpha_2 = ord(letter) + shift
            secret_message = ""
    if alpha_2 in range (0, len(alpha)):
        final_mix = chr(alpha)
        secret_message += final_mix

    return secret_message

正如其他人所说,您有一些缩进问题

对于逻辑级别,您应该明确检查
secret\u message=”“
是否是您想要的。 其他要点:

  • 如果
    字母
    Z
    并且您添加了一个移位,该怎么办?()
  • 您确定首先要将换档范围设置为
    范围(26)
    ?请尝试
    打印(列表(范围(26))
    以查看该范围的情况
不要气馁,一开始玩ASCII可能会让人沮丧,但一旦熟悉了它就会非常有趣

不,看看这个

from tkinter import *

                        #Functions. The first three do the job. The rest are about GUI
def wordlist(a):
    word_list=(list(a))
    return (word_list)

def length(a):
    return(len(wordlist(a))-1)

def encrypt(a,b):
    thelist=wordlist(a)
    i=0
    while i<=(length(a)):
        thelist[i]=(chr(ord(wordlist(a)[i])+(b)))
        i=i+1
    return (''.join(thelist))

def callback():    
    e.focus_set()
    a=e.get()

    e2.focus_set()
    b=int(e2.get())

    e3.delete(0, (length(a)+1))
    e3.insert(0,(encrypt(a,b)))

                        #User Interface

root = Tk(className="_Caesar Cipher Encryptor")


frame1 = Frame(root)
frame1.pack()

frame2= Frame(root)
frame2.pack()

frame3=Frame(root)
frame3.pack()


enter=Label(frame1, text="Enter Text:", bd=3, font="Ariel")
enter.pack(side=LEFT,fill=X)

shift=Label(frame2, text="Shift:", font="Ariel")
shift.pack(side=LEFT,fill=X)

result=Label(frame3,text="Encrypted Code:", font="Ariel")
result.pack(side=LEFT)


e= Entry(frame1,width=50, font="Ariel")
e.pack(side=RIGHT)

e2= Entry(frame2,width=10, font="Ariel")
e2.pack(side=LEFT)

e3=Entry(frame3, font="Ariel")
e3.pack(side=RIGHT)


b = Button(frame2, text="Encrypt", width=10, command=callback, font="Ariel")
b.pack(side=RIGHT)


mainloop()
从tkinter导入*
#功能。前三个就可以了。其余的都是关于GUI的
def词汇表(a):
单词列表=(列表(a))
返回(单词列表)
def长度(a):
返回(len(单词表(a))-1)
def加密(a、b):
列表=单词列表(a)
i=0

当我看到当前代码在做什么,你希望它做什么时?你在
True\u消息中遇到了一些缩进问题。。。你能解决这些问题吗?你有两个缩进问题。但假设这些都不是问题所在,这行代码:secret_message=”“很可能会扼杀输出。检查该行后面的alpha_2的值,看看它是否在您期望的范围内。否则,您的秘密消息将被清空。这不会引发错误吗?(他们说他们没有收到任何错误)@Xymostech是的。刚刚添加完那个位。@JonathonReinhart他可能在SO编辑器中输入了错误的代码。我道歉。虽然我在代码中缩进了
返回移位
,但这里没有显示。欢迎来到StackOverfow!在编写代码时,最好附带一个描述,说明代码应该做什么以及如何解决问题。你可以用你的答案来改进它。