2017-10-08 1 views
1

저는 파이썬과 다른 모든 프로그래밍 언어에 익숙하지 않아 코드에 문제가 있습니다. 나는 당신이 (무엇에 진수 번호) 일부 변환 옵션 중 하나를 선택할 수있는 메뉴를 만들려고 노력 해요 :내부에서 메뉴 함수 호출하기

base = ['Binary', 'Octal', 'Hexadecimal'] 

def menu(): 
    choice = int(input('Choose a conversion method: 1-Binary, 2-Octal,3-HexaDecimal. Your choice: ')) 

    if choice > 3 or choice < 1: 
     print('Invalid choice, choose between 1 and 3.') 
     menu() 
    else: 
     print('something...') 
    return choice 

x = menu() 

num = int(input('Decimal number to be converted to {}: '.format(base[x-1]))) 

#This isn't going to be used on my code, its only here so i can see what 
#Python is getting from input 
print('Verifying choice value: {}'.format(x)) 
print('Verifying num value: {}'.format(num)) 

def binary(num): 
    list = [] 
    var = '' 

    while num >= 1: 
     divint = num // 2 
     list.append(num % 2) 
     num = divint 

    list.reverse() 
    size = len(list) 

    for c in range(0, size): 
     var += str(list[c]) 
    intBin = int(var) 

    return intBin 

def opt(choice): 
    if choice == 1: 
     conv = binario(num) 
    elif choice == 2: 
     conv = octal(num) 
    elif choice == 3: 
     conv = hexa(num) 
    else: 
     print('Invalid Option, try again!') 
     menu() 

    return conv 

print('\nYou have chosen {}: {}'.format(base[x-1], binary(num))) 

문제이고, I는 1과 3 사이에 뭔가를 선택하는 경우, 프로그램이 잘 실행하고 바이너리가 계획된. 만약 내가> 3 또는 < 1을 선택했다면 의도 한대로 메시지를 반환하고 menu()를 다시 호출하지만 새로운 입력이 1과 3 사이라면 오류가 발생합니다. '선택'변수가 첫 번째 시도에서 값을 얻고 두 번째 시도에서 값을 얻는 것처럼 보입니다. 변수를 '재설정'하지 않고 새 값을 새 입력에서 가져 오지 않습니다. 나는 파이썬에 완전히 익숙하지 않다. 어떤 도움이라도 대단히 감사 할 것이다.

if choice > 3 or choice < 1: 
    print('Invalid choice, choose between 1 and 3.') 
    menu() 

당신은 자체 내부의 menu() 함수를 호출하지만, 당신이 그것을 반환 값을 저장하지 않습니다에서

+1

'menu()'를'return menu()'로 변경하면 재귀가 어떻게 작동하는지 더 자세히 살펴보십시오. – jordanm

답변

0

. 이를 변경해야합니다

if choice > 3 or choice < 1: 
    print('Invalid choice, choose between 1 and 3.') 
    choice = menu() 

그러나 코드를 구성하는 좋은 방법은 아닙니다. 이 아니라menu()이라고하는 것이 좋습니다. 대신 간단한 while 루프를 사용하여 사용자에게 올바른 선택을하도록 요청하십시오.

이 주제에 대한 훌륭한 정보는 Kevin의 Asking the user for input until they give a valid response을 참조하십시오.


BTW, 당신은 변수 이름으로 list을 사용해서는 안 그 때문에 "그림자"내장 list 유형입니다. 여기서는 아무런 해가되지 않지만 코드가 혼란 스럽습니다. 이름을 다시 정의한 후에 list 생성자를 사용하여 목록을 만들려고하면 신비한 오류 메시지가 발생할 수 있습니다.

+0

감사합니다. 내 코드를 완전히 변경 했으므로 이제 제안한대로 while 루프를 사용하고 있습니다. 그리고 제 코드는 포르투갈어로되어 있습니다. 여러분이 더 잘 이해할 수 있도록 변경되었습니다. 나는 변수로서리스트를 사용하지 않는다. 그러나 충고에 감사드립니다. –

관련 문제