2013-05-30 4 views
1

'key'변수가 decrypt 함수에 반환되면 왜 인식되지 않습니까?왜 내 파이썬 코드가 "정의되지 않은"오류가 발생합니까?

alphabet = 'abcdefghijklmnopqrstuvwxyz' 
alphaList = list(alphabet) 
text = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj" 

def createKey(aList): 
    key = [] 
    count = 0 
    for letter in aList: 
     if count < 24: 
      key.append(aList[count + 2]) 
     else: 
      key.append(aList[count - 24]) 
     count += 1 
    return key 

def decrypt(text): 
    createKey(alphaList) 
    decryptedList = [] 
    textList = list(text) 
    for c in textList: 
     if c in alphaList: 
      index = alphaList.index(c)  
      decryptedList.append(key[index])  
     else: 
      decryptedList.append(c) 
    decryptedText = "".join(decryptedList) 
    return decryptedText 

print decrypt(text) 
+2

createKey 함수는 키를 반환하지만'decrypt()'는 반환 값을 캡처하지 않습니다. 'key = createKey (alphaList)'. –

+0

@MarcB 나에게 답을주는 것처럼 들리네. – melwil

답변

2

당신은 key 지정하지 : 여기에 코드입니다 : "전역 이름 '키'정의되지 않은 나가서 설명하자면 NameError는"이 오류는 읽고

createKey(alphaList) 

변경은 다음과 :

key = createKey(alphaList) 

이는 keycreateKey(alphaList) 인 경우 createKey namescope의 일부이기 때문에 발생합니다. 반환 할지라도 decrypt 네임 스코프의 일부로 만들지는 않습니다.

또는, 전역 변수를 사용할 수 있지만 나는 쉽게 keydecrypt()에 할당하여 주위를 얻을 수있다 특히 때문에,이 사용하지 않는 것이 좋습니다 :

alphabet = 'abcdefghijklmnopqrstuvwxyz' 
alphaList = list(alphabet) 
text = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj" 
key = [] 

def createKey(aList): 
    global key 
    # everything else 
    # no need to return, the `global key` has been changed 

def decrypt(text): 
    global key 
    createKey(alphaList) 
    # everything else 

참고 :

+0

감사합니다. 하지만 왜 내가 열쇠를 할당해야합니까? 호출 할 때 원래 함수가 키를 반환하면 안됩니까? – uncleGe

+0

@uncleGe 네임 스코프를 읽고 싶을 수도 있습니다 (편집하고 내 대답에 대한 링크를 추가 할 것입니다). 그것은'key'를 리턴하고 있지만, key는 그 함수에 국지적입니다. 당신은 세계를 창조 할 수는 있지만, 그것은 눈살을 찌푸리게합니다. –

+0

좋아, 이제 알았어. 범위 링크를 확인해. 감사! – uncleGe