2015-01-28 2 views
-1

내 PC에 코드의 오래 된 조각 가로 질러, 처음으로 한 번 입력을 요청 :파이썬 : raw_input을 다음 두 번

# -*- coding: utf-8 -*- 

player_pos = 2 

def game(): 
    global player_pos 

    background = [2, 1, 2, 1, 2] 
    screen  = [0] * 5 

    for i in range(5): 
     screen[i] = background[i] 

    screen[player_pos] = 7 

    print screen 

    if raw_input("> ") == 'a': 
     player_pos -= 1 

    elif raw_input("> ") == 'd': 
     player_pos += 1 

while True: 
    game() 

예상대로 내가 IDLE 및 프롬프트 작품에서 실행합니다. 그러나 'a'또는 'd'를 누르면 제대로 작동하거나 빈 줄을 인쇄 한 다음 다시 'd'를 누르면 제대로 작동합니다. 'a'또는 'd'를 한 번 또는 두 번 눌러야합니다. 항상 한 번만 원합니다.

이 질문을 발견했지만 문제를 해결하는 방법을 모르겠습니다. Simple:Python asks for input twice

+0

전역 변수를 사용하지 마십시오. – levi

+0

이 문제를 귀하의 문제에 적용하려면 많은 번역이 필요하지 않습니다. 'raw_input()'을 할 때마다 사용자에게 입력을 요구하는 것이다. 대신'if'와'elif' 전에 변수에'raw_input'을 저장하고 변수를 테스트하십시오. –

+0

가능한 복제본은 왜 원시 \ _ 입력에 루프가 붙어 있습니까? (python)] (http://stackoverflow.com/questions/13267107/why-while-loop-is-sticking-at-raw-input-python) –

답변

3

raw_input 메서드를 두 번 - 각 if 문에 한 번씩 호출합니다. 당신은 테스트 후 로컬 VAR에서 사용자 입력을 저장하고 수 :

user_answer = raw_input("> ") 
if user_answer == 'a': 
    player_pos -= 1 
elif user_answer == 'd': 
    player_pos += 1 
+0

정확히 무엇을 게시 할 것입니다. – rafaeldefazio

0

실행 단계로이 단계 :

  • raw_input가 호출을, 사용자의 입력을 읽습니다.
  • 이 입력은 a과 비교됩니다.
  • a이 아닌 경우 raw_input이 다시 호출되면 사용자의 입력이 읽혀집니다.
  • 이 새로운 입력은 d과 비교됩니다.

d를 입력하기 위해, raw_input이 두 번 호출되므로 처음에는 a를 입력하지 않아야합니다.

관련 문제