2017-11-12 2 views
0

私は学生です。私は3桁の数字を入力したかどうかをチェックするユーザー入力を検証しようとしていますが、2桁の数字しか入力できません。プログラムは、ユーザーが2桁だけを入力したときにうまく動作しますが、3桁以上入力すると、作成したエラーメッセージが表示され、2桁の数字を再入力するように求められます。 number pythonは私に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のようなやり方をする予定だった。再度、感謝します。 –

関連する問題