Python 与列表比较时,“int”对象不可下标
我对python非常陌生,所以如果我问这个基本问题,请原谅 我创建了两个函数: in_range检查值是否在某个范围内 calculate_temp应将给定值与范围列表进行比较,并指定一个点值作为结果Python 与列表比较时,“int”对象不可下标,python,Python,我对python非常陌生,所以如果我问这个基本问题,请原谅 我创建了两个函数: in_range检查值是否在某个范围内 calculate_temp应将给定值与范围列表进行比较,并指定一个点值作为结果 虽然就我所见,所有元素都是整数。温度范围有一个列表。当您在中迭代它时 for temperature_range in temperature_ranges: 您将得到一个名为“温度范围”的每个迭代的列表,比如[5,8,12] print(temperature_range[val]) #5
虽然就我所见,所有元素都是整数。温度范围有一个列表。当您在中迭代它时
for temperature_range in temperature_ranges:
您将得到一个名为“温度范围”的每个迭代的列表,比如[5,8,12]
print(temperature_range[val])
#5
查找该列表中的第一个元素,即int
然后尝试查找该int的第一个元素:
temperature_range[val][0]
这相当于
5[0]
这显然是胡说八道。以下几点主要是在我之前发表评论的所有人的名单: 温度范围的形式是[int,int,int],它不是[int,int,int],[int,int,int],[int,int,int],所以不需要[val] 当您在calculate_temp函数中返回result时,result未定义,我假设您指的是点 result==True是一个比较,而不是赋值 检查此代码,它对我有效:
def in_range (lowerlimit, upperlimit, value):
if lowerlimit <= value <= upperlimit:
result = True
else:
result = False
return(result)
temperature_ranges = ([1,4,11],[5,10,22],[11,20,33],[21,52,123])
def calculate_temp (temperature):
for temperature_range in temperature_ranges:
val = 0 # this variable is not used anymore...
if in_range(temperature_range[0], temperature_range[1], temperature):
points = int(temperature_range[2])
val += 1 # no need to keep it if you dont want
return(points)
print(calculate_temp(3))
您的代码正在崩溃,因为温度范围已经是全局温度范围列表中的子列表。您不需要像处理温度范围[val]那样获取全局列表中的元素。如果你想这样做,那么你应该取一个温度范围的值,而不是温度范围。例如,您可以执行以下操作:
def calculate_temp (temperature):
for val in range(len(temperature_ranges)):
if in_range(temperature_ranges[val][0], temperature_ranges[val][1], temperature):
points = int(temperature_ranges[val][2])
return(points)
此外,您的代码可以大大简化,如下所示:
In [114]: def in_range (lowerlimit, upperlimit, value):
...: return lowerlimit <= value <= upperlimit
...:
...: temperature_ranges = ([1,4,11],[5,10,22],[11,20,33],[21,52,123])
...:
...: def calculate_temp (temperature):
...: for temperature_range in temperature_ranges:
...: if in_range(temperature_range[0], temperature_range[1], temperature):
...: return int(temperature_range[2])
...:
In [115]: calculate_temp(3)
Out[115]: 11
谢谢。这真的很有帮助
if in_range(temperature_range[0], temperature_range[1], temperature):
points = int(temperature_range[2])
解决了这个问题。谢谢 请包括完整的回溯,而不仅仅是调用函数的行。要么温度范围是整数,要么温度范围[val]是整数,因此下一个[…]订阅应用于整数。顺便说一句,你的范围内函数也应该返回lowerlimit,result==True不是赋值,这是一个平等性测试。你可以返回LowerLit的结果。谢谢你。简化确实有帮助。
In [114]: def in_range (lowerlimit, upperlimit, value):
...: return lowerlimit <= value <= upperlimit
...:
...: temperature_ranges = ([1,4,11],[5,10,22],[11,20,33],[21,52,123])
...:
...: def calculate_temp (temperature):
...: for temperature_range in temperature_ranges:
...: if in_range(temperature_range[0], temperature_range[1], temperature):
...: return int(temperature_range[2])
...:
In [115]: calculate_temp(3)
Out[115]: 11
if in_range(temperature_range[0], temperature_range[1], temperature):
points = int(temperature_range[2])