我正在尝试创建一个简单的程序来加密字符串并返回其加密字符。
但是我遇到了for循环的问题,导致Python显示错误:
Traceback (most recent call last):
File "C:/Users/Alex/Desktop/Uni/Programming/encrypt", line 18, in <module>
encrypt(encin)
File "C:/Users/Alex/Desktop/Uni/Programming/encrypt", line 12, in encrypt
encout += e6
UnboundLocalError: local variable 'encout' referenced before assignment
以下是代码:
key = 10
encout = ''
def encrypt(s):
for c in s:
if c != ' ' :
e1 = ord(s)
e2 = e1 - 97
e3 = e2 + key
e4 = e3 % 26
e5 = e4 + 97
e6 = chr(e5)
encout = encout + e6
else:
encout = encout + c
a = input("To encrypt a string type 1, to decrypt a string type 2: ")
if a == '1':
encin = input("Please type the string to encrypt: ")
encrypt(encin)
print(encout)
你能看到它的任何问题吗?
感谢。
答案 0 :(得分:3)
正如错误消息所示,您正在读取encout
的值,encrypt
函数的局部变量在声明之前(即,之前的任何内容)已被分配给它。)
摆脱encout
全局变量 - 它没用,并将encout = ''
行移到encrypt
的开头。然后,在return encout
的最后添加encrypt
(在for
循环终止后)。更改程序的结尾,使其显示为:
print(encrypt(encin))
答案 1 :(得分:2)
我认为你要做的是:
e1 = ord(c)
您正在遍历字符串的字符,但将ord
应用于整个字符串(s
),而不是单个字符c
。这是例外原因。
更新:关于encout
问题,您需要在方法之前声明变量,以便之前访问它,如下所示:
def encrypt(s):
encout = ''
# remaining of the method