2010-11-20 2 views
0

사용자로부터 읽은 목록을 사용하여 일종의 데이터베이스를 만듭니다. 사용자가 finish을 입력하면 while 루프가 중지되기를 원합니다. 그러나 어떤 이유로 루프를 깨기 위해 finish TWICE을 입력해야합니다.루프가 중단되지 않습니다.

또한 목록은 반환 된 후에 비어 있습니다.

def readNames(): 
nameList = [] 
count = 0 
while count != -1: #infinite loop 
    addList = raw_input("Please enter a name: ") 
    if addList == 'finish': 
     return nameList 
     break 
    nameList.append(addList) 
    print nameList 

나는 그것을 호출하고

또한
readNames() 
print readNames() 

함께 일 경우 확인하고있어, 여기에 출력

Please enter a name: Dave 
['Dave'] 
Please enter a name: Gavin 
['Dave', 'Gavin'] 
Please enter a name: Paul 
['Dave', 'Gavin', 'Paul'] 
Please enter a name: Test1 
['Dave', 'Gavin', 'Paul', 'Test1'] 
Please enter a name: finish 
Please enter a name: finish 
[] 
>>> 
+0

나에게 잘 작동합니다 (유휴 상태). 그 외에는 무한 루프를 만드는 훨씬 쉬운 방법이 있습니다 ('True :'충분하다면 왜 위조 변수 + 조건을 생성합니까? 실제로 count = -1'을 찾고있었습니다 ...). 또한,'break'는 불필요합니다 ('return'은 함수와 루프를 빠져 나옵니다). – delnan

+0

나를 위해 잘 작동, 몇 가지 메모 : 당신은 단순히 'while True :'를 무한 루프로 할 수 있으며,'break '가 도달하지 않을 때 돌아온 후에'중단'할 필요가 없습니다. 'names = readNames()'는 나에게 잘 작동한다. 추신 : 당신의 들여 쓰기를 수정했습니다. –

답변

4

당신은 두 번 기능 를 실행합니다. 두 번째 실행에서는 "완료"라고 입력하면 목록이 비어있는 이유가 표시됩니다.

은 당신이하고 싶은 것은 이것이다 :

def readNames(): 
    nameList = [] 
    while True: #infinite loop 
     addList = raw_input("Please enter a name: ") 
     if addList == 'finish': 
      return nameList 
     nameList.append(addList) 

# store the result, then print it 
names = readNames() 
print names 
+0

대규모 도움에 감사드립니다. 연령대에 따라 달라 붙었습니다. :) – Hypergiant

-1

당신과 함께

 
if addList == 'finish': 
     return nameList 
     break 

을 대체 할 수있다

 
if addList == 'finish': 
     return nameList 
     count = -1 

?

제임스

+1

-1 이것은 여전히 ​​불필요합니다 (나와 Ivo의 의견 참조). 또한 질문에 대답하지 않습니다. – delnan

+0

같은 일이 일어나고 있습니다. – Hypergiant

+0

그냥 두 센트를 추가하십시오. 미안 해요. – Bojangles

2

나는 당신의 호출 코드가 실수로 두 번 readnames()를 호출 생각합니다. 당신이

readNames() 
print readNames() 

을 수행 할 때

+0

예, 무슨 일이 일어나고 있는지 나타납니다. 'print readNames()'를 제거한 후, 예상대로 깨뜨리고있다. – Hypergiant

1

아, 당신은 당신의 코드를 게시 후, 나는 문제를 볼 수 있습니다와 같은 표준 입력에서 그 이름을 읽어

readNames() 
print readNames() 

당신은 readNames 전화를 계획 한, 적절하게 return 읽은 이름 및 아무 결과도 (names = readNames()) 할당하지 않기 때문에 결과를 멀리 던져. 그런 다음 readNames을 다시이라고 부르면 루프를 종료하지 않은 것처럼 보입니다 (다시 반복했지만). finish을 다시 입력하면 readNames의 두 번째 호출은 아무런 이름도없이 끝납니다 (nameList은 로컬 변수이므로 함수 실행이 끝난 후에는 손실되므로 다시 []이됩니다).

이 문제를 해결하려면 (1) 일반 프로그래밍 지식을 브러시 업하십시오.) (2) names = readNames()과 같은 작업을 수행하십시오. print names.

+0

많은 도움을 주셔서 감사합니다, 불행히도 THC4k가 당신을 이겼습니다. :) – Hypergiant