2017-04-21 10 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' 변수의 내용이'range' 함수에 의해 생성 된리스트 내에 포함되어 있는지 확인하게됩니다. 이렇게하면 'i'가 정의되지 않았으므로 오류가 발생합니다. – Shadow

+0

정확히 그 문제는 @ 그림자입니다. '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 i in range(len(words)): 

을 :

while` 루프가 아마`for` 루프로 의미`그건
for i in range(len(words)): 
관련 문제