我是python的新手,所以如果我问这个基本问题,请原谅。
我创建了两个函数:
in_range()
检查值是否在范围内calculate_temp
应将给定值与范围列表进行比较,并将点值指定为结果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
if in_range(temperature_range[val][0], temperature_range[val][1], temperature) == True:
points = int(temperature_range[val][2])
val +=1
return(points)
然而print(calculate_temp(3))
打印出错误:
TypeError: 'int' object is not subscriptable.
虽然我可以看到所有元素都是整数。
答案 0 :(得分:1)
温度范围具有列表清单。当您在
中迭代它时for temperature_range in temperature_ranges:
你得到一个名为温度范围的每次迭代的列表,让我们说[5,8,12]
print(temperature_range[val])
#5
找到该列表中的第一个元素,即int
然后你试着找到那个int的第一个元素:
temperature_range[val][0]
相当于
5[0]
这显然是无稽之谈。
答案 1 :(得分:0)
几点(主要是在我之前评论过的所有人的名单):
temperature_range
的形式为[int,int,int],它不是([int, int, int], [int, int, int], [int, int, int])
,因此您不需要[val]
。
当return(result)
函数中的calculate_temp()
未定义结果时,我认为您的意思是points
。
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))
答案 2 :(得分:0)
您的代码崩溃,因为temperature_range
已经是全局temperature_ranges
列表中的子列表。您不需要像使用temperature_range[val]
那样获取全局列表的元素。如果你想这样做,那么你应该取值temperature_ranges
而不是temperature_range
(注意结束 s )。例如,你可以这样做:
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
答案 3 :(得分:0)
感谢。这确实有帮助。
if in_range(temperature_range[0], temperature_range[1], temperature):
points = int(temperature_range[2])
修正了问题。谢谢!