searchList函数Index Out Of Range错误

时间:2016-12-23 15:32:09

标签: python indexing python-3.4

我的程序接受来自用户的3个输入:姓名,人口和县。这些细节成为一个数组,然后附加到另一个数组。然后,用户输入县名,并显示相应的城镇详细信息。

我在函数searchList中收到有关索引超出范围的错误。

def cathedralTowns():
    def searchList(myCounty, myList): #search function (doesn't work)
        index = 0
        for i in myList:
            myList[index].index(myCounty)
            index += 1
            if myList[index] == myCounty:
                print(myList[index])
    records = [] #main array
    end = False
    while end != True:
        print("\nEnter the details of an English cathedral town.")
        option = input("Type 'Y' to enter details or type 'N' to end: ")
        if option == 'Y':
            name = input("Enter the name of the town: ")
            population = int(input("Enter the population of the town: "))
            county = input("Enter the county the town is in: ")
            records.append([name, population, county]) #smaller array of details of one town
        elif option == 'N':
            print("Input terminated.")
            end = True
        else:
            print("Invalid input. Please try again.")
    print(records) #just for checking what is currently in records array
    end = False
    while end != True:
        print("\nEnter the name of an English county.")
        option = input("Type 'Y' to enter county name or type 'N' to end: ")
        if option == 'Y':
            searchForCounty = input("Enter the name of a county: ")
            searchList(searchForCounty, records) #searchList function takes over from here
        elif option == 'N':
            print("Input terminated.")
            end = True
        else:
            print("Invalid input. Please try again.") 

cathedralTowns()

1 个答案:

答案 0 :(得分:1)

您应该修改searchList功能:

def searchList(myCounty, myList):
   for entry in myList:
       if entry[2] == myCounty:
           print("Town: {}, population: {}".format(entry[0], entry[1]))

在Python中,当您迭代列表时,实际上会遍历其元素,因此

for entry in myList

迭代每个"记录"在你的清单中。然后,由于您正在查找某个县,即每个记录中的第三个元素,因此请使用entry[2]对其进行索引,以将其与您的查询进行比较,即myCounty

有关示例记录的示例输入,例如:

records = [['Canterbury', 45055, 'Kent'], ['Rochester', 27125, 'Kent'], ['Other', 3000, 'Not Kent']]

的输出
searchList('Kent', records)

是:

>>> Town: Canterbury, population: 45055
>>> Town: Rochester, population: 27125