2017-11-12 1 views
0

저는 학생이며 Python을 처음 사용하는 사람입니다. 3 자리 숫자를 입력했는지 여부를 확인하기 위해 사용자 입력의 유효성을 검사하려고하는데 2 자리 숫자 만 입력 할 수 있어야합니다. 이 프로그램은 사용자가 2 자릿수 만 입력하면 3 자 이상을 입력 할 때 제대로 작동하며 작성한 오류 메시지를 던지고 2 자리 숫자를 다시 입력 한 다음 다시 2 자리 숫자를 입력하면 다시 입력하도록 요청합니다 숫자 파이썬 내게 TypeError 준다. 나는 점점 오전 전체 오류는 다음과 같습니다Python TypeError : int() 인수는 'NoneType'이 아닌 문자열이나 바이트와 같은 객체 또는 숫자 여야합니다.

Traceback (most recent call last): 
    File "/Users/admin/Desktop/week6/question_7.py", line 87, in <module> 

    File "/Users/admin/Desktop/week6/question_7.py", line 79, in do_stuff 
    print (display_grade(user_in)) 
TypeError: int() argument must be a string, a bytes-like object or a 
number, not 'NoneType' 

내가이 일을하는 이유를 알아내는 데 문제가 있어요. 나는 그 자체 안에 get_input() 함수를 호출하는 것과 관련이 있다고 느낀다. 나는 이것을 피하는 방법을 이해할 수 없다.

내가 계속 오류를 검색하고 도움이되는 것을 찾을 수 없습니다.

다음은 프로그램입니다. 매우 간단합니다.

NUMBER_OF_TESTS = 5 

def get_input(): 
    print ('enter a test score below') 
    user_in = input() 
    if len(user_in) > 2: 
     print ('error, you can only enter a 2 digit number.') 
     get_input() 
    else: 
     return user_in 

def display_grade (letter_grade): 
    if letter_grade >= 89: 
     return ('You got an A!') 
    elif letter_grade >= 80 and letter_grade <= 89: 
     return ('You got a B!') 
    elif letter_grade >= 70 and letter_grade <= 79: 
     return ('You got a C') 
    elif letter_grade >= 61 and letter_grade <= 69: 
     return ('You got a D') 
    else: 
     return ('You got an F') 

def calAverage(total): 
    average_score = (total)/NUMBER_OF_TESTS 
    return int(average_score) 

def do_stuff(): 
    i = 0 

    x = 0 

    while i < NUMBER_OF_TESTS: 
     user_in = int(get_input()) 
     print (display_grade(user_in)) 
     x = x + user_in 
     i = i + 1 
    print ('your average score is' , calAverage(x) , 'which means' , display_grade(calAverage(x))) 



do_stuff() 

답변

1
def get_input(): 
    print ('enter a test score below') 
    user_in = input() 
    if len(user_in) > 2: 
     print ('error, you can only enter a 2 digit number.') 
     get_input() 
    else: 
     return user_in 

문제는 재귀 get_input() 호출입니다. 전화를 걸면 얻은 값이 반환되지 않으므로 대신 None이 반환됩니다. return get_input()으로 교체하십시오. 또한, 귀하의 기능은 사람들이 100 테스트를 얻을 수 있도록 허용하지 않습니다. 그게 의도적인지 나는 모른다.

+0

이것은 완벽한 감사입니다. 다음 단계는 100을 포함하여 len (user_input)> 2 또는 user_input == 100과 같은 작업을 계획하고있었습니다. 다시 한 번 감사드립니다. –

관련 문제