2012-07-24 4 views
1

어리석은 질문이지만 미안하지만 나는 파이썬을 배우고 있으며 이것을 이해할 수 없습니다. :)파이썬 while 루프 문제

내 프로그램은 사용자가 입력 한 모든 상태의 수도를 인쇄하기로되어 있습니다. 때로는 10 번 연속으로 작동하고, 다른 경우에는 3 번 연속으로 작동하며, 입력 한 후에는 중지됩니다. 다시 시작하고 중단 된 상태에서 입력하면 임의의 횟수만큼 잘 작동하고 다시 중지됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 또한 내 코드가 끔찍한가요? 어떤 종류의 코드를 사용해야할지 모르겠다. 그래서 나는 내가 할 수있는 일에 던져 넣었다.

x = str(raw_input('Please enter a sate: ')) 
    while x == 'Alabama': 
     print 'Montgomery is the capital of', x 
     x = str(raw_input('Please enter a state: ')) 
    while x == 'Alaska': 
     print 'Juneau is the capital of', x 
     x = str(raw_input('Please enter a state: '))     
    while x == 'Arizona': 
     print 'Phoenix is the capital of', x 
     x = str(raw_input('Please enter a state: ')) 
    while x == 'Arkansas': 
     print 'Little Rock is the capital of', x 
     x = str(raw_input('Please enter a state: '))' 
+1

누군가 코드 작성에 도움을 주려고했습니다. 코드를 실제로 읽을 수 있도록 사용자에게 맡기거나 스스로 수행해야합니다. – crashmstr

답변

5
  1. 당신은 오히려 여러보다는 하나 개의 큰 while 루프 내에서 여러에게 while 루프를 if 문을 사용하는 것을 의미한다. 이 코드에서는 루프가 끝나고 나면 다시 돌아올 수 없습니다. 이 코드는 알파벳 순으로 상태 이름을 부여하는 한 으로 작동합니다.

  2. 이렇게하지 마세요. 더 좋은 방법은 파이썬 dictionaries을 사용하는 것입니다. 모든 50 개 주를 포함 할 경우

    capitals = {"Alabama": "Montgomery", "Alaska": "Juneau", "Arizona": "Phoenix", "Arkansas": "Little Rock"} 
    while True: 
        x = str(raw_input('Please enter a state: ')) 
        if x in capitals: 
         print capitals[x], "is the capital of", x 
    

그렇지 않으면, 당신은 거의 동일 라인의 50 쌍을 필요하게 될 겁니다.

+0

정말 고마워요 !! 우리는 아직 사전을 다루지 않았지만, 나는이 일을하기 위해 그때까지 기다려야했습니다. – user1549425

+0

대단히 환영합니다. 귀하의 질문에 답변 한 경우 [수락] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)을 잊지 마십시오. –

1

나는 while 루프를 이해하지 못한다고 생각합니다. 기본적으로

while condition: 
    dostuff() 

은 조건이 참일 때 처리합니다. 조건이 거짓이 되 자마자 계속 움직입니다. 그것을 할 수있는 더 나은 방법은 그러나

, 것 (bool('') 파이썬에서 False입니다)

x=True 
while x 
    x=raw_input('please enter a state'): 
    if x == 'Alabama': 
     ... 
    elif x == 'Alaska': 
     ... 

사용자가 방금 입력 히트 영원히 때까지 반복됩니다 : 나는 당신을 위해 무엇을 찾고있는 것은 무엇인가 생각 사전을 사용하는이 방식에

state_capitals={'Alabama':'Montgomery', 'Alaska':'Juneau'} 
x=True 
while x 
    x=raw_input('please enter a state'): 
    print '{0} is the capital of {1}'.format(state_capitals[x],x) 

, 나쁜 자본 (당신은 당신이 원한 경우 try 블록을 사용 잡을 수있는) 주어 졌을 때 그것이 KeyError을 올릴 것이다.

+0

답변 해 주셔서 감사합니다! 당신들은 멋진데! – user1549425

0

모든 정직에서 그것이 더 나쁘다 끔찍한. 그러나, 당신은 초보자 일 가능성이 높습니다.

이 작업을 위해 당신은 국가를 포함하는 dict => 자본 매핑을 사용하고 하면 국가 이름을 읽어야 할 사람 : 당신이 while 루프를 사용하려면

capitals = {'Alabama': 'Montgomery', 
      'Alaska': 'Juneau', 
      ...} 
state = raw_input('Please enter a state: ') 
if(state in capitals): 
    print '{0} is the capital of {1}'.format(capitals[state], state) 
else: 
    print 'Sorry, but I do not recognize {0}'.format(state) 

하면 사용자가 여러 입력 할 수 있도록 상태 일 경우 while True: 블록에 전체 코드를 래핑하고 raw_input 줄 바로 뒤에 if not state: break 줄을 사용하여 사용자가 아무 것도 입력하지 않으면 루프를 중단 할 수 있습니다.

+0

내 질문에 대답 해 주셔서 감사합니다. 전 완전히 초급자입니다. – user1549425