2017-10-31 2 views
2

이전에 작성한 시저 암호를 vigenere 암호에 추가하려고합니다. 나는 나가서 설명하자면 NameError 코드를 얻고 그것에게오류가 있습니다. 그러나 원인을 파악하지 못했습니다.

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() 

내 오류입니다 해결하는 방법을 알고하지 않습니다 나는 문자가 정의되어야한다, 그래서 올바른 함수에서 끌어한다고 생각 NameError: name 'letter' is not defined on line 21

?

답변

0

예, 그것은 참으로 정의되지 않은 :

def vigenere(msg, rot): 
    list1 = "" 
    for char in msg: 
     list1 += rotate(char, rot) #<-- change to char 
    return list1 
0

vigenere 함수에서 list1 += rotate(letter, rot)list1 += rotate(char, rot)으로 변경하십시오. 해당 함수에 선언 된 변수가 letter입니다.

들여 쓰기가 올바른지 확인하십시오. def main()은 들여 쓰기가 잘못되었습니다.

관련 문제