我是学生,对python来说很新。我正在尝试验证用户输入以检查他们是否输入了3位数字,他们应该只能输入2位数字。当用户只输入2位数时,程序运行正常但是当它们输入3或更多时,它会抛出我创建的错误消息并要求他们重新输入一个只有2位数的数字,然后一旦他们重新输入2位数number python给了我TypeError。我得到的完整错误是:
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()
答案 0 :(得分: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分。我不知道这是否是故意的。