python 엔터키까지 눌러야 실행되는 게 아니라, 명령키를 누르면 바로 실행되게 하는 방법.

조회수 2683회

리스트안에서 '#'이 키보드 a,d키에 따라 양옆으로 움직이는 코드를 짜고싶은데 실행할 때, a키 누르고 엔터해야 실행되는게아니라 a키 누르면 바로 실행되게 하고싶은데 어떻게 해야 할까요?

    import random

    from pynput.keyboard import Key, Listener

    myList=['2','4','1','7','5','6','9','3','8','10']
    if__name__=='__main__':
        rand_index = random.randint(0,9)
        myList[rand_index] = '#'

     while True:
        print(myList)
        command=input("command : ")

        if command == 'a' or command == 'A':
            if not rand_index == 0:
             myList[rand_index], myList[rand_index-1] = myList[rand_index-1], myList[rand_index]
             rand_index= rand_index-1

         elif command=='d' or command=='D':
            if not rand_index == 9:
             myList[rand_index], myList[rand_index + 1] = myList[rand_index + 1], myList[rand_index]
             rand_index = rand_index + 1
         elif command=='exit':
            break


    def on_press(key):
        try:
            print(type(key.char))
            if key.char == 'a'or'A':
                print('a pressed')
            elif key. char == 'd'or'D':
                print('d pressed')
        except AttributeError:
            print()


    def on_release(key):
        try:
            print(type(key.char))
            if key == Key.esc:
                return False
            elif key.char == 'a' or 'A':
                print('a released')
            elif key.char == 'd' or 'D':
                print('d released')
            except AttributeError:
                print()

    with Listener(
            on_press=on_press,
            on_release=on_release) as listener:
        listener.join()
  • 공부를 해야 할 수 있지요. 우선 pynput 모듈 사용법을 학습합니다. 그후 잘 안되는 부분을 질문해주새요. 정영훈 2019.11.28 19:49

1 답변

  • getch를 이용해보시는건 어떨까요. window 계열에서는 msvcrt 를 이용하면 되고, UNIX/LINUX 계열에서는 termios 활용하시면 되요.

    아래는 올려주신 소스코드 활용해서 제가 수정해봤어요 참고하세요 주의사항은 윈도우python idle 쉘 말고 cmd로 열어서 확인하시면되요 \r 은 엔터입니다.

    수고하세요

    import random
    import msvcrt
    
    myList=['2','4','1','7','5','6','9','3','8','10']
    if __name__== '__main__':
        rand_index = random.randint(0,9)
        myList[rand_index] = '#'
        _ismoved = 1
    
    while True:
        if(_ismoved == 1):
            print(myList)
            print("command : ")
            _ismoved = 0
    
        if msvcrt.kbhit():
            command = msvcrt.getwch()
    
            if command == 'a' or command == 'A':
                if not rand_index == 0:
                    myList[rand_index], myList[rand_index-1] = myList[rand_index-1], myList[rand_index]
                    rand_index= rand_index-1
                    _ismoved = 1
    
            elif command=='d' or command=='D':
                if not rand_index == 9:
                    myList[rand_index], myList[rand_index + 1] = myList[rand_index + 1], myList[rand_index]
                    rand_index = rand_index + 1
                    _ismoved = 1
    
            elif command=='\r':
                break
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)