Python 替换凯撒密码字符串错误

Python 替换凯撒密码字符串错误,python,string,encryption,Python,String,Encryption,这个程序将加密一条消息。这将是一个凯撒版本的替代加密消息。 它将使字母移位5 from string import * original = raw_input("Enter your string: ") # prompts user for their desired string def sub(input, x): alpha = string.ascii_lowercase newAlpha = alpha[x:] + alpha[:x] i = strin

这个程序将加密一条消息。这将是一个凯撒版本的替代加密消息。 它将使字母移位5

from string import *

original = raw_input("Enter your string: ") # prompts user for their desired string

def sub(input, x):
    alpha = string.ascii_lowercase
    newAlpha = alpha[x:] + alpha[:x]
    i = string.maketrans(alpha, newAlpha)
    return input.translate(i)

print sub(original, 5)
我不知道为什么会有

NameError: global name 'string' is not defined

您正在使用
from string import*
从字符串模块导入所有内容,然后再次调用
string
顶级模块的
string.maketrans
string.ascii\u小写

只需使用
maketrans(alpha,newAlpha)
ascii_小写字母

理想情况下,从模块导入所有内容不是一个好主意和最佳实践。您正在混乱名称空间。只需导入所需内容或导入高级模块。
例如,
来自字符串导入maketrans,ascii_小写

然后使用
i=maketrans(alpha,newAlpha)

alpha=ascii\u小写字母

导入字符串

然后使用
i=string.maketrans(alpha,newAlpha)


alpha=string.ascii\u小写
您正在使用
从string import*
导入string模块中的所有内容,然后再次调用
string.maketrans
string.ascii\u小写

只需使用
maketrans(alpha,newAlpha)
ascii_小写字母

理想情况下,从模块导入所有内容不是一个好主意和最佳实践。您正在混乱名称空间。只需导入所需内容或导入高级模块。
例如,
来自字符串导入maketrans,ascii_小写

然后使用
i=maketrans(alpha,newAlpha)

alpha=ascii\u小写字母

导入字符串

然后使用
i=string.maketrans(alpha,newAlpha)


alpha=string.ascii_小写
使用
导入字符串
而不是字符串导入中的
*
,以兼容
sub
函数与您的导入方法兼容。

使用
导入字符串
而不是
从字符串导入*
,以确保
sub
使用您的导入方法执行功能