2017-04-21 28 views
0

これは私のプログラムです。名前エラーが表示されるのはなぜですか?

sentence = raw_input("Please type a sentence:") 
while "." in sentence or "," in sentence or ":" in sentence or "?" in 
sentence or ";" in sentence: 
    print("Please write another sentence without punctutation ") 
    sentence = input("Please write a sentence: ") 
else: 
    words = sentence.split() 
    print(words) 
specificword = raw_input("Please type a word to find in the sentence: ") 
while i in range(len(words)): 
    if specificword == words[i]: 
     print (specificword, "found in position ", i + 1) 
    else: 
     print("Word not found in the sentence") 
     specificword = input("Please type another word to find in the sentence") 

このエラーが表示されます。このプログラムを実行した後、 文を入力してください:こんにちは私の名前はジェフ ある[「こんにちは」、「私」、「名前が」、「で」、「ジェフ」] してください文章で検索する単語を入力してください:jeff

Traceback (most recent call last): 
    File "E:/school/GCSE Computing/A453/Task 1/code test1.py", line 9, in <module> 
    while i in range(len(words)): 
NameError: name 'i' is not defined 

ここで何が間違っていますか?

+6

:これにより

while i in range(len(words)): 

を。これをwhileループで実行すると、変数 'i'の内容が' range'関数によって生成されたリスト内に含まれているかどうかを確認することになります。これを行うと、 'i'が定義されていないことがわかります。つまり、エラーです。 – Shadow

+0

これはまさに問題の@shadowです。 'for 'ループは新しい変数を定義します。 'while'ループは、スコープ内の条件を評価します。' i'はすでに存在する必要があります。そして意味的には、「私が範囲内にいる間(len(単語))は、ジェフが望むものではありません。 –

+0

ちなみに、Jeffは、組み込みの 'enumerate'関数を調べています。 –

答えて

3
while i in range(len(words)): 

の代わりにforである必要があります。

for x in <exp>は、反復ごとにxに値を割り当てることによって<exp>を反復します。ある意味では、まだ定義されていない変数を作成するという代入文と似ています。

while <cond>はちょうど式としての条件を評価します。

1

NameErrorが定義されていない名前を使用することによって引き起こされます。スペルが間違っているか、割り当てられていない。上記のコードで

、Iがまだ割り当てられていない。 whileループは、現在の値iを検索して、ループするかどうかを判断しようとしています。

コンテキストからは、forループを使用するように見えます。違いは、for-loopが変数を代入することです。

ので、この置き換え: `while`ループはおそらく` for`ループであることを意味していることを

for i in range(len(words)): 
関連する問題