退出任何非列表输入的程序

时间:2016-06-17 16:20:20

标签: python numpy exit-code

我的目标是创建一个程序,将角度从辐射转换为度,反之亦然。如果用户输入要以错误格式转换的信息,我需要程序关闭而没有来自python的错误消息。

将变量'angle'分配给输入的两个值。角度变量成为列表类型。 在北方退出程序没有错误消息我写这个:  '如果angle不是list():break'。

问题在于,当我这样做时,它会退出程序,输入任何类型的命令作为输入。

这是我的代码:

.where

3 个答案:

答案 0 :(得分:1)

您可以使用isinstance(angle, list)检查它是否是列表。但它无法帮助你实现你真正想做的事情。

以下代码将为您提供帮助。

question = """Please enter the angle you want to convert.
If you wish to convert degree in radiant or vice-versa.
Follow this format: 'angle/D or R'
"""

while 1:
    angle=input(question).split('/')

    if not isinstance(angle, list): break # This will never happen
    # It will never happen because string.split() always returns a list

    # Instead you should use something like this:
    if len(angle) != 2 or angle[1] not in ['D', 'R']:
        break

    try:
        angle[0]=float(angle[0])
    except ValueError:
        break

    if (angle[0]>=0 or angle[0]<=360) and angle[1] is 'D':
        # You could also improve this by taking modulo 360 of the angle.
        print((angle[0]*np.pi)/180, 'radiants')
    else:
        # Just an else is enough because we already checked that angle[1] is either D or R
        print((angle[0]*180)/np.pi, 'degrees')

答案 1 :(得分:0)

你想要什么:

if not isinstance(angle, list): break

您已完成的工作:if angle is not list():break将始终评估为True,因为任何对象都不会与列表list()具有相同的身份;因为is是对身份的检查。

即便如此:

>>> list() is not list()
True

答案 2 :(得分:0)

break 语句用于退出 for 循环。尝试在输入语句后使用 while 循环来评估输入。使用可能的设置作为条件。您不需要从 if 语句中断,因为如果不满足条件,它将被绕过。
   有时您可能会看到 if 语句后跟 break 语句。但是, break 语句不会破坏 if 语句。它突然从之前的 循环