Python Int对象不可下标
好的,我有一个程序,有四个不同的城市,每个城市都有一段距离。该程序将询问用户想要计算哪些城市,并返回两个城市之间的距离(以英里为单位)。现在我有一个工作循环,要求用户输入城市1,然后输入城市2,一旦完成,程序将返回两个城市之间的距离。然而,我随后尝试做同样的事情,但要求用户选择三个不同的城市,然后返回三个城市之间的距离。除了一个返回int对象不可下标外,代码基本相同 我将首先粘贴用于将问题循环两次并输出文本的代码。然后,我将粘贴一个我将其更改为循环三次的位置,并尝试以英里为单位输出三个城市的距离 我的城市和距离代码Python Int对象不可下标,python,Python,好的,我有一个程序,有四个不同的城市,每个城市都有一段距离。该程序将询问用户想要计算哪些城市,并返回两个城市之间的距离(以英里为单位)。现在我有一个工作循环,要求用户输入城市1,然后输入城市2,一旦完成,程序将返回两个城市之间的距离。然而,我随后尝试做同样的事情,但要求用户选择三个不同的城市,然后返回三个城市之间的距离。除了一个返回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]]))
您尝试用三个索引为列表下标:
distances[choices[0]][choices[1]][choices[2]]
你可能想要像这样的东西
distances[choices[0]][choices[1]] + distances[choices[1][choices[2]]
下次,给出您得到的准确错误消息 您得到的错误是由以下部分引起的:
distances [choices[0]] [choices[1]] [choices[2]]
“2个城市”的代码有效,因为“距离”是包含城市之间距离的列表,因此“距离”[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号城市的距离,或者任何一种排列方式,或者搜索访问这三个城市的最短路径,但是仅仅要求距离没有任何意义。什么是城市?它的定义是什么?p是什么?为什么叫p.nextInt?三个城市之间的距离是什么意思?我认为这不起作用,伙计,如果你看一下计算两个城市之间距离的工作代码,它工作得绝对正常,即p.write%s和%s之间的距离是\n%d英里\n\%cities[choices[0]]、cities[choices[1]]、distance[choices[0]][choices[1]]我只在代码中添加了一个额外的%s,因为它需要将第三个城市作为字符串值返回,然后添加了[choices[1]],因为在返回距离时还需要考虑一个城市。因此,我有一个有效的两个城市的计算代码,我不明白是什么造成了所有的差异,在末尾加上一点:/@Daniel你不知道你的两个城市的代码是如何工作的,是吗?有关错误的解释,请参阅我的答案。正如我在我的帖子中所说,要求三点之间的距离从一开始就没有意义……你是对的,我从来没有清楚地思考过我所要求的。但不用说,只要我将问题改为应该写什么,就可以编写一个程序,让用户输入一系列城市,并给出按该顺序访问城市时的总行程。这将更有意义: