(Python) 为什么返回 9.0 而不是 9?

(Python) Why is it returning 9.0 instead of 9?

尝试在 python 中为 "Learn Python Book"

中的项目制作一个简单的计数器

简述:编写一个对用户有价值的程序。让用户输入开始数字、结束数字和计数数量。

问题:好的,所以基本上是尝试确保如果用户输入
在(从 2 开始,以 2 为单位计数到 17)程序会将其标记为不可能。

print ("Welcome to the program for those who are to lazy to count")
print ("You must be really really lazy too use this")

input ("\n Press any key to continue")

Num1 = int(input ("Please Enter Starting Number: \n"))
Num2 = int(input ("Please Enter Ending Number: \n"))
count = int(input ("Count up in: \n"))

differ = (Num2 - Num1)

test =(differ/count)

if isinstance(test,int):
 while (Num1 < Num2):
  Num1 += count
  print (Num1)   
  isinstance( test, int )
else:
    print ("Sorry Starting at",Num1,"You can not get to",Num2,"counting up by",count,)

(( 我做了一些测试,发现变量 test 总是以 float.A 整数的形式返回,例如 9 将是 9.0,这当然会使我的 if 语句为假。谁能解释为什么这正在发生,如何 fix/get 绕过它?))

您应该测试 (differ % count) == 0 是否为整数,而不是检查 test 是否为整数。除法运算的结果始终是浮点数,因为 python 3 默认为浮点除法。可以用//.

强制进行整数除法

参见python docs for modulo

Python 3 默认做浮点除法。如果您想强制整数除法,请在您的商 (differ // count) 中使用双斜杠。

Python 3 / 总是 returns 浮动。对于整数除法,使用 //.

wilbur 的回答是最好的,但是如果你仍然想使用除法而不是模,而不是检查 if isinstance(test, int) 来检查 test 是否真的是一个整数类型(这对于 9.0 不是真的),你可以尝试 if test.is_integer() 如果它是具有整数值的浮点数(对于 9.0 为真),它将 return True

这不是您可以指望的方法,因为用浮点数除法是不精确的。使用模运算符更可靠!