对于加密脚本的循环问题

时间:2014-01-10 20:36:25

标签: python encryption

我正在尝试创建一个简单的程序来加密字符串并返回其加密字符。

但是我遇到了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)

你能看到它的任何问题吗?

感谢。

2 个答案:

答案 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