我的目标是创建一个程序,将角度从辐射转换为度,反之亦然。如果用户输入要以错误格式转换的信息,我需要程序关闭而没有来自python的错误消息。
将变量'angle'分配给输入的两个值。角度变量成为列表类型。 在北方退出程序没有错误消息我写这个: '如果angle不是list():break'。
问题在于,当我这样做时,它会退出程序,输入任何类型的命令作为输入。
这是我的代码:
.where
答案 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 语句。它突然从之前的 或 循环。