为何代码报错TypeError: '>'不支持NoneType与int比较?
解决TypeError: '>' not supported between instances of 'NoneType' and 'int'错误
核心错误原因
你写的guess函数里,guess = print(input("What is your first guess?"))这行有问题:print()函数的返回值永远是None,不管它输出什么内容,都不会返回有效数据。所以你把print的结果赋值给guess,最后返回的自然是None,这就是报错里NoneType的来源——当你用它和target()返回的整数比较时,就会触发类型错误。
代码修正步骤
修复guess函数
先获取用户输入并转换成整数(输入默认是字符串,必须转成int才能和随机数比较),直接返回这个整数即可,不需要把print的结果赋值:def guess(): # 获取输入并转为整数后返回 return int(input("What is your first guess?"))如果需要打印用户的输入,可以单独加
print语句,但别把它的返回值赋值给变量。修复check函数的逻辑问题
你现在在check里多次调用guess()和target():第一次比较调用一次,第二次又会调用一次。这会导致用户被要求输入两次,而且每次调用target()都会生成新的随机数,两次比较的目标值不一样,逻辑完全混乱。
正确的做法是先调用一次两个函数,把结果存到变量里,再用变量做比较:def check(guess_func, target_func): user_guess = guess_func() secret_target = target_func() if user_guess > secret_target: print("Too high") elif user_guess < secret_target: print("Too low") else: print("You got it!")
完整修正后的代码
import random def guess(): return int(input("What is your first guess?")) def target(): return random.randint(1, 100) def check(guess_func, target_func): user_guess = guess_func() secret_target = target_func() if user_guess > secret_target: print("Too high") elif user_guess < secret_target: print("Too low") else: print("You got it!") check(guess, target)
内容的提问来源于stack exchange,提问作者Abu
相关产品推荐
相关产品推荐

