2013-04-25 47 views
4

我是新来的蟒蛇,我正在写一个程序,将毫米转换为英寸。基本上它是一个连续的循环,可以让你继续输入数字并获得正确的转换后的测量结果。我想把一个IF语句,允许用户输入“结束”来结束程序,而不是转换更多的度量单位。我将如何去做这项工作(Python代码允许你退出一个书面程序,并可以在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循环。 – 2013-04-25 13:22:28

+0

你想要做一些像'if ... sys.exit(1)'? – Vor 2013-04-25 13:24:07

+3

您的代码已经有效。当我输入'end'时,程序结束。请注意,它会在终止前抛出一个'NameError',但它_does_结束:-) – Kevin 2013-04-25 13:25:58

回答

2

您可以使用break摆脱循环。

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

-1,'MM'已经是一个浮点数 – Vyktor 2013-04-25 13:22:48

+0

@Vyktor好点,但很容易修复,不知道它是否值得-1 ... – Aprillion 2013-04-25 13:28:26

+0

如果我改变了代码convert = float(25.4) while True: 打印(“******* MM *******”) MM = float(input()) 结果= float(MM/convert) print(“***** Inches ** ***“) print(”%。3f“%Results) print(”%。4f“%Results) print(”%。5f“%Results) – 2013-04-25 13:28:59

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) 

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 ==“结束”,然后退出程序 – 2013-04-25 13:28:05

+0

是的,这是我的第一个例子吗?我只是把它作为一个额外的选项来写出退出:) – Torxed 2013-04-25 13:31:18

+0

@ user2316617也,你做了'MM = float(input())'这使得不可能检查'MM =='字符串''因为'MM'不再一个字符串,它是一个数字。 – Torxed 2013-04-25 13:33:12

1

测试对于MM后,它是由用户输入可以工作。您使用关键字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。你也可以采取事实上的优势ValueErrorraised如果不兑换值的指令:

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和如果发生错误,请转到下一个循环,好的方法是:

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 

或者你可以把它“linuxy”可以等到按下Ctrl+C (Keyboard interrupt)并优雅地处理它:

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

这将是这样的(^C手段发送Ctrl+C):

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

用于异常处理。 – 2013-04-25 13:38:45

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) 

这样,iter调用input并将其返回值存储在i中,直到i == 'end'

请注意,如果用户输入非数字值(如上例),则可能需要进行一些错误检查。

+0

这个问题用py3x标记,py3x中没有'raw_input'。 – 2013-04-25 13:36:58

+0

我认为他在Python 3中这样做。难道他们没有在Python 3中将'raw_input()'重命名为'input()'? – 2013-04-25 13:37:21

+0

就我个人而言,我认为这样做有点草率。例如,如果用户输入“End”或“end”或“end”,会怎么样? – 2013-04-26 19:58:30

4

要结束循环,可以使用break语句。这可以在if语句中使用,因为break只查看循环,而不查看条件。所以:

if user_input == "end": 
    break 

注意我是如何使用user_input,不MM?这是因为你的代码现在有一个小问题:你在查看用户输入的内容之前调用了float()。这意味着如果他们键入“结束”,你会调用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 2013-04-25 13:39:42

+0

谢谢:我错过了。修正了我的答案来反映这一点。 – rmunn 2013-04-25 13:44:40

+0

您还应该建议修剪输入中的空格,以防用户在“结束”之前或之后意外击中空格键 – 2013-04-26 19:59:22