-4

这是我的错误:

Traceback (most recent call last):
  File "N:\Downloads\#swig.py", line 45, in <module>
    print("Mode =", numdict2[1])
IndexError: list index out of range

这是我的代码:

lennumlist = int(1)
x = 1
y = 0
newlist = []
added = 0
numlist = []
while x < 6:
    print("This is number",x)
    num1 = int(input("Number?"))
    x = x + 1
    numlist.append(num1)
print("Your numbers =", numlist)
print("Calculating mean...")
while y < 5:
    num = numlist[y]
    added = added + num
    y = y + 1
divide = added / len(numlist)
print("Your mean is", divide)
print("Calculating mode...")
numlist.sort
numdict = {}
numlist1 = []
listlength = len(numlist)
x = 1
for x in range (0,listlength):
    if not numlist[x] in numdict:
        numdict[numlist[x]]=1
    else:
        numdict[numlist[x]] = numdict[numlist[x]] + 1
numdict1 = []
numdict1 = sorted(numdict.values())
numdict2 = []
nummy = int(len(numdict1))
print(numdict1)
print(numdict)
for x in range (1, nummy):
    print(x)
    if numdict[x] == numdict1[x]:
        numdict2.append(numdict[x])
if len(numdict2) > 1:
    print("Modes =", numdict2)
else:
    print("Mode =", numdict2[1])

我已经收到这个错误一段时间了。我的程序旨在计算用户输入的数字的平均值和众数。我的老师告诉我,这通常是由于试图添加一个字符串和一个整数造成的。有什么帮助吗?:(

4

2 回答 2

0

你有代码:

if len(numdict2) > 1:
    print("Modes =", numdict2)
else:
    print("Mode =", numdict2[1])

如果列表的长度不大于 1,那么它(最多)是一个元素。Python(像大多数语言一样)列表从零开始,而不是从一开始。所以该行应该是:

print("Mode =", numdict2[0])

但是,您还应该针对列表可能为空的可能性进行编码。

顺便说一句,使用listnumdict2之类的名称非常令人困惑,也许会更好?numlist2

编辑:所以现在你有一个与你发布的错误不同的错误:

if numdict[x] == numdict1[x]:

当一个列表(或字典)用[](or {}) 初始化时,它是空的,所以它甚至没有索引零。您可以使用以下方法测试列表中的某些内容:

if numdict1:

如果那里有东西,这给出 True,如果它是空的,则给出 False。

于 2015-04-30T06:56:59.890 回答
0

Python 中的列表索引从零开始,因此如果numdict2 列表中只有一个条目,那么除了零之外,您不能使用任何其他内容作为索引。

于 2015-04-30T06:52:17.997 回答