我试图用函数在python中创建一个简单的加密程序,但有一个问题,当我运行程序时,会收到一条错误消息,说“msgReversed”未定义)。在
该程序的工作原理是先反转用户的消息,然后将字母转换为键的值
alphabet=("abcdefghijklmnopqrstuvwxyz ")
def userInput():
plaintext=input("Enter message to encript")
k=int(input("Enter encription Key you want to use (1-25)"))
return (k,plaintext)
def reverseMsg(plaintext):
msgReversed=''
leng=len(plaintext)-1
for c in plaintext:
msgReversed+=plaintext[leng]
leng=leng-1
print(msgReversed)
return(msgReversed)
def encript(msgReversed,k):
cipher=''
for c in msgReversed:
if c in alphabet:
cipher+=alphabet[(alphabet.index(c)+k)%(len(alphabet))]
print(cipher)
(k,plaintext)=userInput()
reverseMsg(plaintext)
(cipher)=encript(msgReversed,k)
错误消息如下所示:
^{pr2}$
在最后一行中,将一个名为“msgReversed”的变量传递到“enccript”函数中。但是:msgReversed只在您的“reverseMsg”函数中本地定义。变量可以是只存在于函数内部的局部变量。或者全局变量,它们都存在于整个脚本中。一个简单的解决方法是通过在“reverseMsg”函数的第一行前面添加“global”,使msgReversed成为一个全局变量。从第一行到最后一行的另一个解决方案: msgReversed=reverseMsg(明文)
关于这个问题的简化教程:http://www.python-course.eu/global_vs_local_variables.php
添加了一个简单的示例:
在函数之外,'myname'函数将生成“Marc”。但是在函数内部,myname将生成“Sonder”。如果您要删除第一行,并尝试执行最后一行,以打印“myname”的全局版本,您将得到与现在完全相同的错误。在
为了理解这一点,我会复制这个脚本,看看当你注释掉某些部分时会有什么变化。在
正如我在评论中提到的,你的变量msgReversed并没有在你的函数之外声明,所以当你在函数外调用它时,它没有被定义。为了避免发布重复的答案,以下是另一种方法:
我不知道您以前是否使用过类,但是这里有一个示例和pythons的官方文档(https://docs.python.org/2/tutorial/classes.html)
至于全局变量,可以在函数中声明全局变量。您只需声明它是全局的:
^{pr2}$因此,变量msgReversed的函数如下:
更改最后几行:
为此:
^{pr2}$相关问题 更多 >
编程相关推荐