2017-02-05 15 views
-1

Я запрограммировал линейное решение поиска. Программа запрашивает у пользователя имя и будет искать список, чтобы узнать, присутствует ли это имя. Если он присутствует, пользователю будет сказано так. Иначе пользователю будет сказано так.Линейное решение поиска

popularNames = ["Andrew","Ben","Charles","David","Ethan","Fred"] 
found = False 
index = 0 

name= input ("Please enter the name you wish to search for:\n") 

while found == False and index <7: 
    if name == popularNames[index]: 
     found = True 
    index = index +1 
if found == True: 
    print(name,"is in the list.") 
else: 
    print(name,"is not in the list.") 

Однако программа не будет печатать сообщение «имя не найдено», вместо этого оно печатает синтаксическую ошибку (см. Ниже).

line 8, in if name == popularNames[index]: IndexError: list index out of range

Куда я иду не так?

+2

Это не ошибка синтаксиса, что это 'IndexError'. Вы проверяете 'index <7', но нет' популярныхNames [6] '. Также вы можете просто использовать 'для popularName в популярных именах:' для получения элементов или просто проверить 'if name in popularNames:'. Также вы должны использовать 'while not found' и' if found', а не сравнивать для равенства с 'True' и' False'. – jonrsharpe

ответ

0

Проблема

index < 7 означает, что индекс 6 по-прежнему считается.

Ваши массивы имеет 6 элементов, а индекс равен нулю на основе: от 0 до 5.

Решение

Вы не должны жёстко 7 или 6. Вы могли бы просто использовать len(popularNames) - 1.

На самом деле вам не нужно работать с индексом вообще. Повторить по списку:

for name in popularNames: 
    # do stuff with name 

Вам не придется вручную перебирать либо:

if name in popularNames: 
    print(name,"is in the list.") 
else: 
    print(name,"is not in the list.")