2013-08-06 57 views
-3

好吧,所以我有一個程序,有四個不同的城市,每個城市都有距離。該計劃將詢問用戶他們想要計算哪些城市,並且它將以英里返回兩個城市之間的距離。現在我有一個工作循環,要求用戶輸入城市1,然後輸入城市2,一旦完成該程序將返回兩個城市之間的距離。然而,我然後試圖做同樣的事情,但要求用戶選擇三個不同的城市,然後返回三個城市之間的距離。代碼字面上是相同的,除了一個返回「int對象不可下載」Int對​​象不是可訂閱的

我將首先粘貼代碼,該代碼用於循環兩次問題並輸出文本。然後,我將粘貼一個我已經修改它的地方三次循環,並嘗試以英里輸出三個城市的距離。

我的城市和距離代碼

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

工作兩個城市代碼

def distancestwo(): 
    choices=[0,1] 
    for j in range(2): #This will loop twice, hence giving the option for two cities. More could be added! 
     for i in range(len(cities)): 
      p.write ("%d : %s\n" %(i, cities[i])) 
     p.write("\nEnter city number %d: \n"%(j+1)) 
     choices[j]=p.nextInt() 

    p.write("\n") #Leaves a line for the output of the distance 



    p.write("The distance between %s and %s is \n%d miles!\n"\ 
     % (cities[choices[0]], cities [choices[1]],distances [choices[0]] [choices[1]])) 

這一次卻返回的對象不標化

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

    p.write("\n") #Leaves a line for the output of the distance 



    p.write("The distance between %s ,%s and %s is \n %d miles!\n"\ 
      % (cities[choices[0]], cities [choices[1]], cities [choices[2]],distances [choices[0]] [choices[1]] [choices[2]])) 
+0

什麼是「城市」?它在哪裏定義? –

+0

對不起,我將更新 – Daniel

+0

@MaximeLorant新增 – Daniel

回答

1

您試圖下標列表有三個索引的列表:

distances[choices[0]][choices[1]][choices[2]] 

,你可能想要的東西,像

distances[choices[0]][choices[1]] + distances[choices[1][choices[2]] 

下一次,讓你得到精確的錯誤消息。

+0

我認爲這不會起作用,如果你看一下計算兩個城市之間距離的工作代碼,它工作得很好,這就是p.write(「%s和%s之間的距離是\ n%d哩!\ n「\ %(城市[選項[0]],城市[選項[1]],距離[選項[0]] [選項[1]])) – Daniel

+0

我只爲該代碼添加了額外的%因爲它需要返回第三個城市作爲字符串值,然後添加[choices [1]],因爲在返回距離時需要考慮一個城市。因此,我有一個有效的兩個城市計算代碼,我不明白是什麼讓所有的差異增加了一點到最後:/ – Daniel

+1

@丹尼爾你沒有任何想法_how_你的代碼爲兩個城市的工作,你呢?看到我的答案爲錯誤的解釋。正如我在我的帖子中所說的,在三點之間要求一個_distance_沒有任何意義...... – l4mpi

1

你得到的錯誤是因爲這部分的:

distances [choices[0]] [choices[1]] [choices[2]] 

你的2個城市代碼的工作,因爲distances是一個包含城市之間的距離,這樣做distances[choices[0]][choices[1]]第一列表的列表中選擇了距離列表首先選擇的城市,然後選擇第二個城市的條目:

dist_list = distances[choices[0]] #list of distances 
distance_in_miles = dist_list[choices[1]] #entry for the selected city 

因此,在新的代碼,你試試這樣做:

result = distance_in_miles[choices[2]] 

這當然並不如你想索引的東西的工作是一個數字,而不是一個列表或字典等

而且,你正在試圖做的甚至沒​​有開始有道理,因爲沒有距離之間三個點。你可以計算從城市1到城市2到城市3的距離或者任意排列,或者搜索訪問這三個城市的最短路徑,但只是要求「距離」沒有任何意義。

相關問題