首页 > 解决方案 > 我是 python 新手,我的列表超出范围有问题

问题描述

所以我在这里得到一个超出范围的列表索引:

for i in range(len(empNr)):

print(empNr[i], rate[i], hrs[i], wkPay[i])

而且我还没有真正弄清楚列表,所以我可能只是感到困惑并且无法理解为什么我会超出范围。下面是其余的代码。谢谢!

SENTINEL = 0
wkTotal = payHigh = wkPay = empHigh = 0 

empNr = []
rate = []
hrs = []
wkPay = []

i = 0
empNr.append(input("Input first employee number: "))
#iteration if 0 is entered it should stop
while (empNr[i] != str(SENTINEL)):
    rate.append(int(input("Input rate: ")))
    hrs.append(int(input("Input hours: ")))
    wkPay.append(rate[i] * hrs[i])
    i = i + 1
    empNr.append(input("Input employee number or '0' to stop: "))
#calculations using list functions
wkTotal = sum(wkPay)
payHigh = max(wkPay)

wkAvg = float(wkTotal) / len(empNr)
#output summary for pay calculator

print("\n\n Data entry complete " +" \n --------------------------------------")
print("\n Employee Number     Pay Rate     Hours worked     Pay  ")
print("--------------------------------------------------------")
for i in range(len(empNr)):
    print(empNr[i], rate[i], hrs[i], wkPay[i])

print("Summary: ")
print("WEEK TOTAL: ", str(wkTotal))
print("EMPLOYEE HIGH: ", str(empHigh))
print("PAY HIGH: ", str(payHigh))
print("WEEK AVERAGE: ", str(wkAvg))
 

标签: pythonpython-3.xlist

解决方案


empNr.append(input("Input employee number or '0' to stop: "))此行附加'0'empNr. 但它没有rate,hrs或的对应值wkPay。意思ratehrs或者wkPay说这些比的少一个元素empNr。快速修复(但不推荐)是循环 forratehrs代替empNr. 所以你的代码是:

for i in range(len(rate)):
    print(empNr[i], rate[i], hrs[i], wkPay[i])

更好的解决方法是:

i = 0
inp = input("Do you want to add anew record? Y/n: ")
while (inp == "Y"):
    empNr.append(input("Input first employee number: "))
    rate.append(int(input("Input rate: ")))
    hrs.append(int(input("Input hours: ")))
    wkPay.append(rate[i] * hrs[i])
    i = i + 1
    inp = input("Do you want to add anew record? Y/n: ")

empNr因此,当我输入“Y”时,我可以添加新条目,并且每个, rate, hrs,的长度都wkPay将匹配。如果我输入除 以外Y的任何内容,循环将终止,长度仍将保持不变......


推荐阅读