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!在编写代码时,最好附带一个描述,说明代码应该做什么以及如何解决问题。你可以用你的答案来改进它。