2014-01-10 69 views
1

我想创建一个简单的程序来加密一个字符串并返回其加密的字符。For循环问题与加密脚本

但是我有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) 

你可以看到它的任何问题?

谢谢。

回答

3

由于错误消息说,你是读取encout的值,encrypt函数的局部变量,之前声明它(也就是说,在分配给它之前)。

摆脱encout全局变量 - 这是无用的,并将encout = ''行移动到encrypt的开头。然后,在encrypt的末尾添加return encout(在for循环终止之后)。更改您的程序的结尾,以便它读取:

print(encrypt(encin)) 
+0

感谢您的回答,我将使用这个,因为我不喜欢使用'全局安全'。 – user2975192

2

我认为你正在试图做的是:

e1 = ord(c) 

您通过字符串的字符尚未迭代应用ord整个字符串(s),而不是个性c。这是例外原因。

UPDATE:关于encout问题,您需要声明变量的方法的顶部之前,为了访问它,就像这样:

def encrypt(s): 
    encout = '' 
    # remaining of the method 
+0

谢谢,这是我的愚蠢。我现在显示错误'UnboundLocalError:本地变量'encout'在赋值之前被引用' – user2975192

+0

您正在定义方法外部的'encout'变量并在里面重新定义它。这意味着可变范围的问题。最好使'encrypt''返回encout'并将其分配给您的全局'encout'变量。另外,你可以用新信息更新问题吗? –