파이썬 입력 시 종료 - paisseon iblyeog si jonglyo

티스토리 뷰

개발사항

  • 사용자에게 입력받은 값의 평균을 구한다.
  • done 이라는 문자열이 입력되기 전까지 숫자를 계속 입력받는다.
  • done 이 입력되면 총합계 및 평균을 출력하고 프로그램을 종료한다.
i_num = 0 f_tot = 0.0 while True : #무한루프를 돌며 사용자에게 값을 입력받는다. s_inputVal = input('Enter a number : ') if s_inputVal == 'done' : #입력값이 'done' 이면 평균값을 출력하고 프로그램 종료 break try: #연산을 위해 문자열을 실수형으로 형변환 f_inputVal = float(s_inputVal) except: #입력값이 숫자 또는 'done' 이 아니면 메세지 출력 후 다시 루프를 탄다. print('Invalid input') continue i_num = i_num + 1 f_tot = f_tot + f_inputVal print(f_tot, i_num, f_tot/i_num)
프로그램 수행 결과

END

티스토리 뷰

사용자에게

강아지의 이름을 입력 받아

리스트에 저장하였다가

출력하는 프로그램이다.

1

2

3

4

5

6

7

8

9

10

11

12

names = []

while True:

    name = input("강아지의 이름을 입력하시오 (종료는 엔터키) : ")

    if name == '':

        break

    names.append(name)

print("강아지들의 이름 : ")

for i in range(len(names)):

    print(names[i], end=", ")

cs

  - 설명  

강아지의 이름을 입력받아

name 변수에 담은 뒤,

names 리스트에 추가한다.

line 5를 통해

엔터키만 입력받을 시

while문을 빠져나간다.

while문이 종료되면

강아지들의 이름이

리스트를 순회하며 출력된다.

end=", "를 쓰면

다음 라인으로 가지 않고

a, b, c처럼 출력된다.

  - 결과  

  - 추가  

for i in names:

    print(i, end=", ")

 

위와 같이 리스트의

item 자체를 반복해도

결과는 동일하다.

직렬 데이터를 읽고 while 루프를 사용하여 csv 파일에 쓰고 있습니다. 사용자가 충분한 데이터를 수집했다고 느끼면 while 루프를 종료 할 수 있기를 바랍니다.

while True: #do a bunch of serial stuff #if the user presses the 'esc' or 'return' key: break

나는 opencv를 사용하여 이와 같은 일을했지만이 응용 프로그램에서 작동하지 않는 것 같습니다 (그리고 어쨌든이 기능을 위해 opencv를 가져오고 싶지 않습니다) …

# Listen for ESC or ENTER key c = cv.WaitKey(7) % 0x100 if c == 27 or c == 10: break

그래서. 사용자가 루프를 벗어나게하려면 어떻게해야합니까?

또한 while 루프가 종료 된 후에도 스크립트가 계속 실행되어야하므로 키보드 인터럽트를 사용하고 싶지 않습니다.

답변

가장 쉬운 방법은 일반적인 Ctrl-C(SIGINT)로 중단하는 것입니다 .

try: while True: do_something() except KeyboardInterrupt: pass

이후 Ctrl-C원인이 KeyboardInterrupt제기 될 단지 루프 밖에서 그것을 잡을 그것을 무시한다.

답변

비표준 모듈이 필요하지 않고 100 % 운송 가능한 솔루션이 있습니다.

import thread def input_thread(a_list): raw_input() a_list.append(True) def do_stuff(): a_list = [] thread.start_new_thread(input_thread, (a_list,)) while not a_list: stuff()

답변

다음 코드가 나를 위해 작동합니다. openCV (cv2 가져 오기)가 필요합니다.

코드는 누른 키를 지속적으로 찾는 무한 루프로 구성됩니다. 이 경우 ‘q’키를 누르면 프로그램이 종료됩니다. 다른 키 (이 예에서는 ‘b’또는 ‘k’)를 눌러 변수 값 변경 또는 기능 실행과 같은 다른 작업을 수행 할 수 있습니다.

import cv2 while True: k = cv2.waitKey(1) & 0xFF # press 'q' to exit if k == ord('q'): break elif k == ord('b'): # change a variable / do something ... elif k == ord('k'): # change a variable / do something ...

답변

Python 3.7의 경우 user297171의 멋진 답변을 복사하고 변경하여 테스트 한 Python 3.7의 모든 시나리오에서 작동합니다.

import threading as th keep_going = True def key_capture_thread(): global keep_going input() keep_going = False def do_stuff(): th.Thread(target=key_capture_thread, args=(), name='key_capture_thread', daemon=True).start() while keep_going: print('still going...') do_stuff()

답변

답변

항상 sys.exit()있습니다.

Python 핵심 라이브러리의 시스템 라이브러리에는 프로토 타이핑시 매우 편리한 종료 기능이 있습니다. 코드는 다음과 같습니다.

import sys while True: selection = raw_input("U: Create User\nQ: Quit") if selection is "Q" or selection is "q": print("Quitting") sys.exit() if selection is "U" or selection is "u": print("User") #do_something()

답변

특정 키 (이 경우 이스케이프 키)로 스크립트를 끝내도록 rayzinnz의 답변을 수정했습니다.

import threading as th import time import keyboard keep_going = True def key_capture_thread(): global keep_going a = keyboard.read_key() if a== "esc": keep_going = False def do_stuff(): th.Thread(target=key_capture_thread, args=(), name='key_capture_thread', daemon=True).start() i=0 while keep_going: print('still going...') time.sleep(1) i=i+1 print (i) print ("Schleife beendet") do_stuff()

Toplist

최신 우편물

태그