简单除数代码报错:TypeError: 'float'对象无法被解释为整数
解决TypeError: 'float' object cannot be interpreted as an integer的问题
嘿,我来帮你搞定这个报错!咱们先拆解一下问题出在哪:
你代码里的user_number是用float(input(...))获取的,所以不管用户输入的是整数还是小数,它都是float类型。然后你用num = user_number//2,哪怕结果是整数(比如输入4.0时得到2.0),这个num依然是float类型。
接下来你写了round(num,0)和int(num),但你没有把这两个操作的结果重新赋值给num!这两行代码相当于只算了个值但没存下来,num还是原来的float。当你把float类型的num传给range(divisor, num)时,range要求参数必须是整数,自然就触发了那个TypeError。
修正后的代码
def main(): user_number = float(input("Enter a number: ")) # 直接将//运算的结果转为整数,替代无效的round和int操作 num = int(user_number // 2) print(num) divisor = 1 # 改成num+1,让range包含num本身(避免漏掉num自己这个除数) for divisor in range(divisor, num + 1): if num % divisor == 0: print(divisor) while True: main()
关键修改点说明
- 把
num的赋值改成int(user_number // 2),一步到位得到整数类型的num,这样传给range就不会报错了。 - 删掉了无效的
round(num,0)和int(num)——因为这两个函数不会修改原变量,必须把结果赋值回去才有用,直接在赋值时转int更简洁。 - 额外优化了
range的第二个参数:原来的range(divisor, num)是左闭右开区间,比如num=5时只会遍历1-4,会漏掉5这个除数,改成num+1就能覆盖到num本身了。
内容的提问来源于stack exchange,提问作者TangyTiger
相关产品推荐
相关产品推荐

