2014-07-21 6 views
1

일부 입력 문의 결과를 함수의 매개 변수로 사용하려고합니다. 나는이 같은 함수 전에 입력 문을 가하고, 후 나중에 함수를 호출 시도했다 :Python 함수에서 매개 변수로 입력 문 사용하기

s=input("Enter the message:") 
raw_key=input("Enter the raw key for columnar transposition:") 
method=input("Enter the key generation method:") 

def encryptColumnar(s,raw_key,method): 
    if method==1: 
     numkey=key1(raw_key) 
    if method==2: 
     numkey=key2(raw_key) 
    return(columnar(s,numkey)) 

encryptColumnar(s,raw_key,method) 

하지만 그것은 단지 나에게 오류 UnboundLocalError: local variable 'numkey' referenced before assignment을 제공합니다. 함수 앞에 입력 문을두면 입력을 묻는 메시지가 표시되지만 입력이 함수의 매개 변수로 사용된다고 인식하지 못합니다.

도움 주셔서 대단히 감사합니다.

편집 : NEW CODE :

이 현재 내가 함께 일하고 있어요 코드입니다 :

s=input("Enter the message:") 
raw_key=input("Enter the raw key for columnar transposition:") 
method=input("Enter the key generation method:") 

def encryptColumnar(s,raw_key,method): 
    if method=='1': 
     numkey=key1(raw_key) 
    if method=='2': 
     numkey=key2(raw_key) 
    return(columnar(s,numkey)) 

encryptColumnar(s,raw_key,method) 

그것은 더 이상 날 UnboundLocalError를 제공하지 않습니다, 그러나 그것은 또한 이후에 아무것도 인쇄되지 않습니다 입력 문 프롬프트에 매개 변수를 제공합니다.

+0

오류의 전체 추적을 게시 할 수 있습니까? – TheSoundDefense

+1

파이썬 3.x에서 이것을 실행한다면,'input'은 파이썬 2 버전처럼 사용자 응답을'eval()'하지 않을 것입니다 - 그것은 문자열로 리턴 할 것입니다. 그러므로 당신의 조건'method == 1' 등은 절대로 만족되지 않을 것이고,'numkey'는 정의되지 않습니다. –

+1

'int (입력 ("메시지 입력 :"))'등. –

답변

1

는 파이썬 3.x의에서이 작업을 실행하는 경우, input()eval() 파이썬 2 버전과 같은 사용자의 응답이 않습니다하지 않습니다 - 그것은 문자열로 반환합니다 (그것은 기본적으로 파이썬 2의 raw_input처럼 동작). 따라서 귀하의 조건 method == 1 등은 결코 충족되지 않으므로 numkey은 정의되지 않습니다.

그래서 당신은 옵션이 있습니다

  • 중 하나가 정수에 대해 int 및 테스트에 사용자의 응답을 변환 :
import sys 

method = input("Enter the key generation method:") 

try: 
    method = int(method) 
except ValueError: 
    print("You need to enter an integer!") 
    sys.exit(1) 

# ... 

if method == 1: 
    # ... 
  • 이거나 당신이 사용자의 입력을 받아 문자열 값에 대한 테스트 :
import sys 

method = input("Enter the key generation method:") 

if method == '1': 
    # ... 
elif method == '2': 
    # ... 
else: 
    print("Unknown method!") 
    sys.exit(1) 

except 문의 자세한 내용은 exception handling에 대한 설명서 및 elif 절에 대한 자세한 내용은 if statement의 문서를 참조하십시오. 그것들은 당신의 문제에 엄격히 관련이 없지만 @TheSoundDefense가 지적했듯이, 여러분의 코드에 대한 에러 처리가 약간 향상 될 수 있으므로 거기에 가야합니다 ;-)

+0

매우 명확한 대답, 정말 고마워요! – hooliaquoolia

+0

반갑습니다. 여러 번 질문을 편집하고 사람들이 요청한 후속 질문에 신속하게 응답 한 사실이 많은 도움이되었습니다. –

1

numkeyencryptColumnar 끝 부분에서 설정할 수 있다고 보장 할 수 없습니다. method이 3 또는 1 또는 2 이외의 경우 실행되지 않는 numkey= 문이 없으므로 절대로 할당되지 않습니다. 그런 다음 return에 도달하면 할당되지 않은 변수를 반환하려고하기 때문에 오류가 발생합니다. 최소한 numkey이 덮여 있는지 확인하려면 else 진술을 입력해야합니다.

+0

이 함수는 메서드 매개 변수로 1 또는 2 만 입력한다는 것을 알 수있는 함수입니다 (raw_key를 생성하는 방법은 두 가지뿐입니다). 1 또는 2를 입력해도 오류가 발생합니다 (1 또는 2 이외의 다른 이유는 없습니다). 나는 아직도 이와 같은 else 문을 써야 하나? : else : numkey = numkey 또는 some such? – hooliaquoolia

+0

@hooliaquoolia 먼저 Python 3.x를 사용한다면 Lukas Graf의 제안을 받아보십시오. – TheSoundDefense

관련 문제