如何在不允许用户输入的同时防止非数字输入?

0 投票
1 回答
36 浏览
提问于 2025-04-12 04:18
def prompt_for_angles(angle_name: str) -> float:
    try:
        angle: float or None = float(input(f"Angle for {angle_name}: "))
        while not (0 < angle < 180):  # while input is NOT correct
            print("Invalid. Please enter an angle between 0 and 180")
            angle: float or None = float(input(f"Angle for {angle_name}: "))
    except ValueError:  # nothing is entered, acceptable
        print("value error")
        angle = unknown
    return angle

我正在制作一个应用程序,用户可以输入三角形的已知角度和边长,然后根据未知的边或角来计算它的长度或角度。我希望用户可以不输入任何内容,这样就可以把那个角当作未知(0),同时又要防止用户输入非数字的内容。有什么好的方法可以让我同时做到这两点呢?

我用的这个“尝试-异常”代码块在没有输入时能正常工作,但它也会捕捉到其他所有的值错误,比如字符和符号。

1 个回答

1

在把输入转换成浮点数之前,先检查一下输入是否为空。这样你就能把它和其他无效的输入区分开来。

def prompt_for_angles(angle_name: str) -> float:
    while True:
        num = input(f"Angle for {angle_name}: ").strip()
        if num == "":
            return unknown
        try:
            angle: float = float(num)
            if 0 <= angle <= 180:
                return angle
        except ValueError:
            pass
        print("Invalid. Please enter an angle between 0 and 180")

撰写回答