IndexError:列表索引超出范围(在数组上)

时间:2017-04-10 08:58:08

标签: python python-3.x

print("NOTE: Parcels can only be smaller than 100x100x100cm (WxLxH) and weight less than 20kg")
parcelAmount = int(input("How many parcels are you sending?: "))
for i in range(parcelAmount):
      parcelWidth.append(input("Please enter the width of the parcel " + str(i + 1) + ": "))
      parcelLength.append(input("Please enter the length of the parcel " + str(i + 1) + ": "))
      parcelHeight.append(input("Please enter the height of the parcel " + str(i + 1) + ": "))
      parcelWeight.append(input("please enter the weight of the parcel " + str(i + 1) + ": "))
      i = i + 1
if float(parcelWidth[i]) or float(parcelLength[i]) or float(parcelHeight[i]) > int(100) or float(parcelWeight[i]) > int(20):
    parcelRej = parcelRej + 1
parcelAcc = parcelAmount - parcelRej
if float(parcelWeight[i]) > 1 and float(parcelWeight[i]) < 5:
    parcelPrice[i] = 10
if float(parcelWeight[i]) > 5:
    parcelPrice[i] = parcelWeight[i] - 5 + 10   
print("There are " + str(parcelRej) + " parcels rejected")
print("There are " + str(parcelAcc) + " parcels accepted")
print("It will cost $" + str(sum(parcelPrice)) + " To ship the parcel")

此代码查找发送宗地的价格。我一直得到&#34; IndexError:列表索引超出范围&#34;所有的if语句,我不知道为什么请帮助我。提前致谢 :)。

这是完整的代码,但是堆栈溢出说它代码太多而且没有足够的细节,所以我只想添加这个段落来添加空间,这样我就像你们问的那样添加完整的代码。那你们好吗?你们来自哪里?你们多大了?为什么它仍然是太少的文字和太多的代码... UGH什么时候会结束?

2 个答案:

答案 0 :(得分:0)

看起来您需要更深入地了解数组是什么。数组有它的大小,所以你需要确保你没有超过它。带上你的parcelWidth[i]。当i的值大于parcelWidth -1的大小时(这是因为数组的第一个元素被索引为0),会发生索引超出范围错误。

示例:

>>> parcelWidth = [1,2,3,4]
>>> i = 0
>>> parcelWidth[i]
1
>>> i = 3
>>> parcelWidth[i]
4
>>> i = 4
>>> parcelWidth[i]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>>

你现在有这个概念吗?您无法访问不存在的数组元素。

要快速检查数组的长度,可以使用len(),如下所示:

>>> len(parcelWidth)
4

为避免您的错误,请勿访问不存在的元素。可能你应该控制i的高度,并检查所有数组是否都有足够的元素。

答案 1 :(得分:0)

先生,你的代码中的问题是你在for循环中提到的(i = i + 1)。 For循环将自动递增i,直到它的最后一个索引不需要递增(i)for for循环但如果你想使用while循环编写代码,你必须递增i。代码是

print("NOTE: Parcels can only be smaller than 100x100x100cm (WxLxH) 
and weight less than 20kg")
parcelAmount = int(input("How many parcels are you sending?: "))
#parcelWidth=[]
#parcelLength=[]
#parcelHeight=[]
#parcelWeight=[]
#parcelRej=0
#for i in range(parcelAmount):
    parcelWidth.append(input("Please enter the width of the parcel " + 
    str(i + 1) + ": "))
    parcelLength.append(input("Please enter the length of the parcel " 
    + str(i + 1) + ": "))
    parcelHeight.append(input("Please enter the height of the parcel " 
    + str(i + 1) + ": "))
    parcelWeight.append(input("please enter the weight of the parcel " 
    + str(i + 1) + ": "))
    # i = i + 1
if float(parcelWidth[i]) or float(parcelLength[i]) or float(parcelHeight[i]) > 100 or float(parcelWeight[i]) > 20:
    parcelRej = parcelRej + 1
parcelAcc = parcelAmount - parcelRej
if float(parcelWeight[i]) > 1 and float(parcelWeight[i]) < 5:
    parcelPrice[i] = 10
if float(parcelWeight[i]) > 5:
    parcelPrice[i] = parcelWeight[i] - 5 + 10
print("There are " + str(parcelRej) + " parcels rejected")
print("There are " + str(parcelAcc) + " parcels accepted")
print("It will cost $" + str(sum(parcelPrice)) + " To ship the parcel")

我收到错误,因为没有定义parcelPrice因为idk的值。

希望这对你有用..