' INT'与列表比较时,对象不可订阅

时间:2018-02-07 18:59:34

标签: python

我是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.

虽然我可以看到所有元素都是整数。

4 个答案:

答案 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)

几点(主要是在我之前评论过的所有人的名单):

  1. temperature_range的形式为[int,int,int],它不是([int, int, int], [int, int, int], [int, int, int]),因此您不需要[val]

  2. return(result)函数中的calculate_temp()未定义结果时,我认为您的意思是points

  3. result == True是一种比较,而非作业。

  4. 检查此代码,它对我有用:

    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])

修正了问题。谢谢!