class BarcodeAnalyser():
def __init__(self):
self.rangeTrueBarcarodesfirst =[]
self.rangeTrueBarcodesecond = []
self.rangeTrueBarcodethird = []
self.isBrange1 = []
self.isBrange2 = []
self.isBrange3 = []
def isthere5or8(self):
for values in self.rangeTrueBarcarodesfirst:
if (values[2:] == '5' or values[2:] == '8') and (values[7:] == '5' or values[7:] == '8'):
self.isBrange1.append(values)
print("this is identified bcode in this range(2456500 - 2556499): " + str(self.isBrange1))
if values is None:
break
for values2 in self.rangeTrueBarcodesecond:
if (values2[2:] == '5' or values2[2:] == '8') and (values2[7:] == '5' or values2[7:] == '8'):
self.isBrange2.append(values2)
print("this is identified bcode in this range(8500000 - 9499999): " + str(self.isBsrange2))
if values2 is None:
break
for values3 in self.rangeTrueBarcodethird:
if(values3[2:] == '5' or values3[2:] == '8') and (values3[7:] == '5' or values3[7:] == '8'):
self.isBrange3.append(values3)
print("this is identified bcode in this range (9790681 - 9815680): " + str(self.isBrange3))
if values3 is None:
break
以上代码的输出为:
if (values[2:] == '5' or values[2:] == '8') and (values[7:] == '5' or values[7:] == '8'):
IndexError: invalid index to scalar variable.
列表rangeTrueBarcodefirst
、rangeTrueBarcodesecond
和rangeTrueBarcodethird
的内容的格式如下:[9369181, 8668489]
我只是尝试切片,如果值索引2和8等于5或8,则将它们附加到相应的列表中
我做得对吗
原件:
关键的一点是,您正在尝试切片不支持切片的内容。例如,
987[1]
抛出错误,而不是返回8
,因为整数不支持切片似乎
rangeTrueBarcodesfirst
是一个包含数字的列表。你的文章举例:但是,请看循环的简化版本:
所以第一次通过,
values == 9369181
,这是一个整数。不能对整数进行切片,因此在尝试values[2:]
时会发生错误。您可能希望在某个时候将values
强制转换为字符串,如下所示:另外三个想法:
values
是这个变量的奇数名称,因为它只是一个值(无论是字符串还是整数)。为什么不称之为更具描述性的东西,比如barcode
李>barcode
存储为字符串。你曾经相信它们是整数吗李>pandas
或numpy
数据类型中,因此如果这不能解决您的问题,我建议发布导致rangeTrueBarcodesfirst
构造的代码李>你知道吗
编辑:
我一开始就意识到你的例子里还有更多的东西。基本思想(仔细想想
values
变量中的内容)是相同的,但这里还有一些注释(假设values
应该是字符串)首先,
values[2:] == '5'
左边是字符串的一部分,而不是单个字符,因此只有当values
的长度正好是3时才是True
。例如,'abc'[2:] == 'c'
,但是'abcd'[2:] == 'cd'
所以要么你有一个bug,要么你期望一个长度为3的列表。在第一种情况下,你的意思可能是
values[2]
(注意不要:
)。在第二种情况下,您又遇到了麻烦,因为在同一行中,您看到的是values[7:]
。如果字符串太短,则返回空字符串(''
)换句话说,不管
values
中有什么,下面的表达式总是假的:相关问题 更多 >
编程相关推荐