2017-02-05 3 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'です:あなたは、手動のいずれか反復する必要はありません

for name in popularNames: # do stuff with name 

。 'index <7'をチェックしますが、' popularNames [6] 'はありません。また、 'popularNamesの' popularName'を使って要素を取得することもできますし、単に 'popularNamesの' name'をチェックすることもできます。また、 'True'と' False'との等価性を比較するのではなく、 '見つからない'と '見つかった場合'を使うべきです。 – jonrsharpe

答えて

0

問題

index < 7はインデックス6はまだ考えられていることを意味しています。

あなたの配列は6つの要素を持っていますが、インデックスはゼロベースさ:0〜5

ソリューション

あなたは7または6をハードべきではありません。あなたはちょうどlen(popularNames) - 1を使うことができます。

実際、インデックスをまったく使用する必要はありません。リストに反復する:

構文エラーではありません
if name in popularNames: 
    print(name,"is in the list.") 
else: 
    print(name,"is not in the list.")