解释为浮点数的整数输入

Integer input intepreted as a float

我有一个交互式菜单,如果数字是浮点数或不是给定列表的子集,用户必须在其中编辑一些数字。使用以下代码:

grades = np.array([-3,-10.5,0,7,4,8,4,7,10,5])
SevenGradeScale = np.array([-3, 0, 2, 4, 7, 10, 12])
for i in range(np.size(grades)):
    if grades[i] not in SevenGradeScale:
        while True:
            if type(grades[i]) is np.float64:
                print("{:f} is not a valid grade. The grade must be an integer.".format(grades[i]))
            elif type(grades[i]) is np.int32:
                print("{:d} is not within the seven grade scale.".format(grades[i]))
            else:
                type("{:f} is not a valid grade.".format(grades[i]))
            #try:
            grades[i] = input("Insert new grade: ")

我想做的是,用户编辑脚本认为无效的号码。但是当我试图输入一个整数时,我得到了一个浮点数。这是为什么?

-10.500000 is not a valid grade. The grade must be an integer.

Insert new grade: 10
10.000000 is not a valid grade. The grade must be an integer.

Insert new grade: 

默认情况下numpy数组只存储单一类型的数据。由于最初它包含一个浮点数(10.5),所以整个数组都是浮点数。

您需要测试值而不是测试数据类型,例如通过 grades[i].is_integer()

这是因为 np.array 默认为浮动。如果你想把数组做成整数格式,就这样做:

foo = np.array([1, 3, 5, 7])
bar = foo.astype(int)