2016-12-23 4 views
0

Моя программа принимает 3 входа от пользователя: имя, население и округ. Эти данные становятся массивом, который затем добавляется к другому массиву. Затем пользователь вводит имя графства и данные соответствующих городов. Я получаю сообщение об ошибке вне индексации внутри моей функции searchList. Я посмотрел на stackoverflow для ответа и не нашел ни одного, и я провел последние три часа, пытаясь понять, что делать. Пожалуйста, помогите, я новичок в программировании.Индекс вне диапазона - Мой поиск Функция поиска не работает

Могу ли я также спросить, нет решений для numpy, пожалуйста. Я знаю, что это была бы легкая задача с numpy, но я на рабочем компьютере без прав на установку внешних модулей. Я знаю, что это можно сделать со стандартной библиотекой, я просто не знаю, как это сделать.

Я использую Python 3.4

#my code 
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() 
+0

Можете ли вы изменить свой вопрос, чтобы включить полную ошибку трассировка в формате кода? – pbreach

ответ

0

Вы должны изменить свой 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 
+0

Спасибо! Как я могу отображать результаты только с названием города и населением в формате «название города: население» – Arbiter

+0

Я отредактировал ответ, это то, что вы просили? –

+0

Да, но мне также интересно, как я мог форматировать результат, чтобы его более видимое строковое представление, без отображения графства – Arbiter

 Смежные вопросы

  • Нет связанных вопросов^_^