-2

所以我基本上我希望它循环三次,如你所见,我有选择 = 0,1,2 和m范围 3 内的 for 所以这应该循环三次,首先是选择 0,然后是选择 1,然后是选择 2。那么为什么会超出范围呢?

Python的确切错误返回:

choices[r]=p.nextInt()
IndexError: list assignment index out of range

请忽略p.next,因为这是我们必须在 uni 编写它的方式,因为我们有自己的模块。

这是我的代码

cities=["Coventry", "Birmingham", "Wolverhampton", "Leicester"]
distances=[
    [0,25,33,24],
    [25,0,17,42],
    [33,17,0,54],
    [24,42,54,0]]

def distancesthree():
    choices=[0,1,2] 
    for m in range(3): #This will loop three times!
        for r in range(len(cities)):
            p.write ("%d : %s\n" %(r, cities[r]))
        p.write("\nEnter city number %d: \n"%(m+1))
        choices[r]=p.nextInt()
4

3 回答 3

2

您是否有可能使用了错误的变量 - 可能是您想写m而不是r

choices[m]=p.nextInt()
于 2013-08-06T10:21:58.517 回答
1

当您在整个地方使用单字母名称时会发生这种情况......
r最后一行应该替换为m

但是我编辑了您的代码,以向您展示它应该如何编写。

cities = ("Coventry", "Birmingham", "Wolverhampton", "Leicester")
distances = [
    [0, 25, 33, 24],
    [25, 0, 17, 42],
    [33, 17, 0, 54],
    [24, 42, 54, 0],
]

def chooseDistances():
    choices = [0, 1, 2] 
    for choiceIndex in range(3):
        for cityIndex, cityName in enumerate(cities):
            p.write("%d : %s\n"%(cityIndex, cityName))
        p.write("\nEnter city number %d: \n"%(step+1))
        choices[choiceIndex] = p.nextInt()

那么您将永远不会使用 cityIndex 进行选择,或使用choiceIndex 进行城市...

于 2013-08-06T10:33:14.633 回答
0

之后for r in range(len(cities)):r将是3因为那是列表中的最后一项range(len(cities))

因此,当您这样做时choices[r],您正在尝试这样做choices[3],但列表仅上升到索引 2。

也许你的意思是choices[r-1]?甚至可以说for r in range(len(cities) - 1):?甚至choices[m]

于 2013-08-06T10:20:21.427 回答