Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 与列表比较时,“int”对象不可下标_Python - Fatal编程技术网

Python 与列表比较时,“int”对象不可下标

Python 与列表比较时,“int”对象不可下标,python,Python,我对python非常陌生,所以如果我问这个基本问题,请原谅 我创建了两个函数: in_range检查值是否在某个范围内 calculate_temp应将给定值与范围列表进行比较,并指定一个点值作为结果 虽然就我所见,所有元素都是整数。温度范围有一个列表。当您在中迭代它时 for temperature_range in temperature_ranges: 您将得到一个名为“温度范围”的每个迭代的列表,比如[5,8,12] print(temperature_range[val]) #5

我对python非常陌生,所以如果我问这个基本问题,请原谅

我创建了两个函数:

in_range检查值是否在某个范围内 calculate_temp应将给定值与范围列表进行比较,并指定一个点值作为结果
虽然就我所见,所有元素都是整数。

温度范围有一个列表。当您在中迭代它时

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