我有一个交互式菜单,如果数字是浮点数或不是给定列表的子集,用户必须编辑某些数字。使用以下代码:
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:
答案 0 :(得分:5)
默认情况下,numpy
数组仅存储单个类型的数据。由于最初它包含浮点数(10.5
),因此整个数组都是浮点数。
您需要测试值,而不是测试数据类型,例如按grades[i].is_integer()
。
答案 1 :(得分:3)
这是由于np.array
在浮动时被默认。如果要将数组转换为整数格式,请执行以下操作:
foo = np.array([1, 3, 5, 7])
bar = foo.astype(int)