2013-04-25 2 views
4

저는 파이썬에 익숙하지 않아 밀리미터를 인치로 변환하는 프로그램을 작성하고 있습니다. 기본적으로 연속 루프로 숫자를 계속 입력하고 정확한 변환 된 측정 값을 얻을 수 있습니다. 나는 더 많은 측정 단위를 변환하는 대신 사용자가 "end"를 입력하여 프로그램을 종료 할 수있게하는 IF 문을 넣기를 원합니다. 이 작업을 수행하는 방법은 무엇입니까 (파이썬 코드를 사용하면 작성된 프로그램을 종료 할 수 있으며 IF 문에서 사용할 수 있습니다).사용자 입력을 사용하여 프로그램을 종료하는 방법은 무엇입니까?

convert=float(25.4) 
while True: 
    print("*******MM*******") 
    MM=float(input()) 
    Results=float(MM/convert) 
    print("*****Inches*****") 
    print("%.3f" % Results) 
    print("%.4f" % Results) 
    print("%.5f" % Results) 
+2

'break' 문을 사용하여'while '루프를 중지 할 수 있습니다. –

+0

'if ... sys.exit (1)'과 같은 것을하려고합니까? – Vor

+3

코드가 이미 작동합니다. 'end'를 입력하면 프로그램이 종료됩니다. 당신이 종료하기 전에'NameError'를 throw하지만, _does_ end :-) – Kevin

답변

2

당신은 루프의 탈옥 break를 사용할 수 있습니다.

MM=input() 
if MM == "end": 
    break 
+0

-1,'MM'은 이미 float입니다. – Vyktor

+0

좋은 점은 있지만 좋은 점이겠지만, -1이라는 가치가 있는지 확신 할 수없는 경우 ... – Aprillion

+0

변환 할 코드를 float (25.4) while으로 바꾸면 어떻게됩니까? 결과는 = float (MM/convert) 인쇄 ("******* MM *******") 인쇄 결과는 "float (입력) ("% .3f"% 결과) 프린트 ("% .5f"% 결과) –

0
import os 
print ("Convert MM to Inches") 
convert=float(25.4) 
while True: 
    print("*******MM*******") 
    MM=input() 
    if MM.lower() in ('end', 'quit'): 
     os._exit(1) 
    MM = float(MM) 
    Results=float(MM/convert) 
    print("*****Inches*****") 
    print("%.3f" % Results) 
    print("%.4f" % Results) 
    print("%.5f" % Results) 

또는

MM위한
print ("Convert MM to Inches") 
convert=float(25.4) 
while True: 
    print("*******MM*******") 
    MM=input() 
    if MM.lower() in ('end', 'quit'): 
     break 
    MM = float(MM) 
    Results=float(MM/convert) 
    print("*****Inches*****") 
    print("%.3f" % Results) 
    print("%.4f" % Results) 
    print("%.5f" % Results) 
+0

예 MM == "끝"다음 프로그램 나가기와 같은 일을하려고합니다. –

+0

예, 저의 첫 번째 예가 무엇입니까? 방금 쓸데없는 옵션을 추가했습니다 :) – Torxed

+0

@ user2316617 또한 'MM == "string"'MM이 더 이상 존재하지 않기 때문에'MM = float (input())'을 검사 할 수 없습니다. 문자열, 숫자입니다. – Torxed

1

시험 작동 할 수있는 사용자에 의해 입력 된 후. 루프에서 벗어나려면 break 키워드를 사용하십시오. 귀하의 예, 사소한 추가 후 다음과 같습니다.

print ("Convert MM to Inches") 
convert=float(25.4) 
while True: 
    print("*******MM*******") 
    MM=input() 
    if MM == 'end': 
     break 
    Results=float(MM)/convert 
    print("*****Inches*****") 
    print("%.3f" % Results) 
    print("%.4f" % Results) 
    print("%.5f" % Results) 
2

break statement을 사용할 수 있습니다.

print ("Convert MM to Inches") 
convert=float(25.4) 
while True: 
    print("*******MM*******") 
    MM=input() 
    try: 
     MM = float(MM) 
    except ValueError: 
     break 

    Results=float(MM/convert) 
    print("*****Inches*****") 
    print("%.3f" % Results) 
    print("%.4f" % Results) 
    print("%.5f" % Results) 

결과 :

[[email protected] tmp]$ ./convert 
Convert MM to Inches 
*******MM******* 
exit 
[[email protected] tmp]$ 

또는 당신은 단지 문자열 exit에 종료 할 경우 당신은 또한 비 컨버터블 값이 발행 된 경우 ValueErrorraised 것을 사실을 이용할 수있다 오류가 발생하면 다음 루프로 이동하십시오.

MM = input() 
if MM == 'exit': 
    break 

try: 
    MM = float(MM) 
except ValueError: 
    print('I\'m sorry {} isn\'t a valid value'.format(MM)) 
    continue # Next iteration 

또는 당신은 Ctrl+C (Keyboard interrupt)을 누를 때까지 "linuxy" 기다릴 수 있도록하고 우아를 처리 할 수있는이 같은 갈 것

try: 
    # Whole program goes here 
except KeyboardInterrupt: 
    print('Bye bye') 

( Ctrl+C를 전송 ^C 수단) :

[[email protected] tmp]$ ./convert 
Convert MM to Inches 
*******MM******* 
^CBye bye 
+0

+1 예외 처리. –

4

그냥 센티넬으로 iter을 사용하십시오.

print ("Convert MM to Inches") 
convert=float(25.4) 
for i in iter(input, 'end'): 
    print("*******MM*******") 
    try: 
     MM=float(i) 
    except ValueError: 
     print("can't convert {}".format(i)) 
    else: 
     Results=float(MM/convert) 
     print("*****Inches*****") 
     print("%.3f" % Results) 
     print("%.4f" % Results) 
     print("%.5f" % Results) 

이렇게하면 iterinput을 호출하고 에 i == 'end'까지 반환 값을 저장합니다.

위의 예와 같이 사용자가 숫자가 아닌 값을 입력 할 경우를 대비하여 오류 검사가 필요할 수 있습니다.

+0

질문에 py3x 태그가 붙어 있습니다. py3x에는 raw_input이 없습니다. –

+0

그가 파이썬 3에서 이것을하고 있다고 생각합니다. 파이썬 3에서'raw_input()'을'input()'의 이름으로 바꾸지 않았습니까? –

+0

개인적으로 나는 이렇게하는 것이 조금 어색하다고 생각합니다. 예를 들어 사용자가 "End"또는 "end"또는 "end"를 입력하면 어떻게됩니까? –

4

루프를 종료하려면 break 문을 사용할 수 있습니다. break은 루프가 아닌 조건문 만보고 있기 때문에 if 문에서 사용할 수 있습니다.그래서 : 나는 user_input하지 MM을 사용하는 방법

if user_input == "end": 
    break 

주의 사항? 그게 바로 당신의 코드가 사소한 문제가 있기 때문입니다 : 당신이 입력 한 것을 확인하기 전에 당신은 float()를 호출하고 있습니다. 즉, "end"라고 입력하면 float ("end")를 호출하고 예외가 발생합니다. 이런 식으로 코드를 변경합니다

user_input = input() 
if user_input == "end": 
    break 
MM = float(user_input) 
# Do your calculations and print your results 

하나 더 개선 당신이 할 수 있습니다 : 당신이 원하는 경우 사용자가 "끝" "END"를 입력하거나 "종료"또는 수 있도록, 당신이 낮은 사용할 수 있습니다 () 메서드를 사용하여 비교하기 전에 입력을 소문자로 변환합니다.

user_input = input() 
if user_input.lower() == "end": 
    break 
MM = float(user_input) 
# Do your calculations and print your results 

이러한 모든 변경을 수행하면 프로그램이 원하는대로 작동합니다.

+1

그는 Python 3을 사용하고 있습니다. Python 3의'input'은 Python 2에서'raw_input'이하는 일을합니다. – Cairnarvon

+0

감사 : 나는 그것을 놓쳤습니다. 이것을 반영하기 위해 내 대답이 수정되었습니다. – rmunn

+0

사용자가 실수로 스페이스 바를 눌렀을 때를 대비하여 입력에서 공백을 삭제하는 것이 좋습니다. –

관련 문제