Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Int对象不可下标_Python - Fatal编程技术网

Python Int对象不可下标

Python Int对象不可下标,python,Python,好的,我有一个程序,有四个不同的城市,每个城市都有一段距离。该程序将询问用户想要计算哪些城市,并返回两个城市之间的距离(以英里为单位)。现在我有一个工作循环,要求用户输入城市1,然后输入城市2,一旦完成,程序将返回两个城市之间的距离。然而,我随后尝试做同样的事情,但要求用户选择三个不同的城市,然后返回三个城市之间的距离。除了一个返回int对象不可下标外,代码基本相同 我将首先粘贴用于将问题循环两次并输出文本的代码。然后,我将粘贴一个我将其更改为循环三次的位置,并尝试以英里为单位输出三个城市的距离

好的,我有一个程序,有四个不同的城市,每个城市都有一段距离。该程序将询问用户想要计算哪些城市,并返回两个城市之间的距离(以英里为单位)。现在我有一个工作循环,要求用户输入城市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你不知道你的两个城市的代码是如何工作的,是吗?有关错误的解释,请参阅我的答案。正如我在我的帖子中所说,要求三点之间的距离从一开始就没有意义……你是对的,我从来没有清楚地思考过我所要求的。但不用说,只要我将问题改为应该写什么,就可以编写一个程序,让用户输入一系列城市,并给出按该顺序访问城市时的总行程。这将更有意义: