Python 我有一个错误,但我不知道是什么原因造成的
我正在使用以前编写的caesar密码,并将其添加到vigenere密码中。我得到一个名称错误代码,不知道如何解决它Python 我有一个错误,但我不知道是什么原因造成的,python,caesar-cipher,vigenere,Python,Caesar Cipher,Vigenere,我正在使用以前编写的caesar密码,并将其添加到vigenere密码中。我得到一个名称错误代码,不知道如何解决它 def alphabet_position(letter): alphabet_pos = {'A':0, 'a':0, 'B':1, 'b':1, 'C':2, 'c':2, 'D':3, 'd':3, 'E':4, 'e':4, 'F':5, 'f':5, 'G':6, 'g':6, 'H'
def alphabet_position(letter):
alphabet_pos = {'A':0, 'a':0, 'B':1, 'b':1, 'C':2, 'c':2, 'D':3,
'd':3, 'E':4, 'e':4, 'F':5, 'f':5, 'G':6, 'g':6,
'H':7, 'h':7, 'I':8, 'i':8, 'J':9, 'j':9, 'K':10,
'k':10, 'L':11, 'l':11, 'M':12, 'm':12, 'N': 13,
'n':13, 'O':14, 'o':14, 'P':15, 'p':15, 'Q':16,
'q':16, 'R':17, 'r':17, 'S':18, 's':18, 'T':19,
't':19, 'U':20, 'u':20, 'V':21, 'v':21, 'W':22,
'w':22, 'X':23, 'x':23, 'Y':24, 'y':24, 'Z':25, 'z':25 }
pos = alphabet_pos[letter]
return pos
def rotate(letter, rot):
shift = 97 if letter.islower() else 65
return chr((ord(letter) + rot - shift) % 26 + shift)
def vigenere(msg, rot):
list1 = ""
for char in msg:
list1 += rotate(letter, rot)
return list1
def main():
letter = input('Enter a letter: ')
rot = int(input('Enter a number: '))
print(alphabet_position(letter))
print(rotate(letter,rot))
x = input("Type a message: ")
y = input("Rotate by: ")
result = vigenere(x, y)
print (result)
if __name__ == '__main__':
main()
我的错误是:
name错误:第21行未定义名称“字母”
我认为它应该从正确的函数中提取,以便定义字母?在
vigenere
函数中,将list1+=rotate(letter,rot)
更改为list1+=rotate(char,rot)
-该函数中没有声明letter
变量
另一方面,请确保缩进正确:您的
def main()
缩进似乎不正确。是的,它确实没有定义:
def vigenere(msg, rot):
list1 = ""
for char in msg:
list1 += rotate(char, rot) #<-- change to char
return list1
def vigenere(味精,腐烂):
list1=“”
对于msg中的字符:
列表1+=旋转(字符、旋转)#