Python计算器:检查输入有效性

0 投票
3 回答
886 浏览
提问于 2025-04-17 22:45

我的代码看起来运行得很好,但就是没有打印出 except Exception: 下面的那句:print("这个输入无效。")。我尝试去修复它,但情况变得更糟。有没有人能帮我看看我缺少了什么?谢谢!

正确输出示例:

Calculator
Give a number: hah, NEVER
This input is invalid.
Give a number: What?
This input is invalid.
Give a number: 100
Give a number: Just kidding
This input is invalid.
Give a number: 50
(1) +
(2) -
(3) *
(4) /
(5)sin(number1/number2)
(6)cos(number1/number2)
(7)Change numbers
(8)Quit
Current numbers: 100 50
Please select something (1-6): 2
The result is: 50
(1) +
(2) -
(3) *
(4) /
(5)sin(number1/number2)
(6)cos(number1/number2)
(7)Change numbers
(8)Quit
Current numbers: 100 50
Please select something (1-6): 8
Thank you!

我的代码:

def getnumber():
    while True:
        try:
            number = input("Give a number: ")
            if number.isdigit():
                return number

        except Exception:
            print("This input is invalid.")

def main():
    import math
    print("Calculator")
    promptForNumbers = True

    while True:

        if promptForNumbers:


            number1 = int(getnumber())

            number2 = int(getnumber())

            promptForNumbers = False
        print("(1) +\n\n(2) -\n\n(3) *\n\n(4) /\n\n(5)sin(number1/number2)\n\n(6)cos(number1/number2)\n\n(7)Change numbers\n\n(8)Quit\n")
        print("Current numbers: %s %s" % (number1, number2))
        selection = int(input("Please select something (1-8): "))        


        if selection == 1:
            print("The result is: %s" % (number1 + number2))
            print("\n")
        elif selection == 2:
            print("The result is: %s" % (number1-number2))
            print("\n")
        elif selection==3:
            print("The result is: %s" % (number1*number2))
            print("\n")
        elif selection==4:
            print("The result is: %s" % (number1/number2))
            print("\n")
        elif selection==5:
            print("The result is: %s" % math.sin(number1/number2))
            print("\n")
        elif selection==6:
            print("The result is: %s" % math.cos(number1/number2))
            print("\n")
        elif selection==8:
            print("Thank you!")
            break
        elif selection==7:
            promptForNumbers = True
        else:
            print("Selection was not correct.")  
if __name__ == "__main__":
    main()

3 个回答

0

试试这个:

def getnumber():
    while True:
        number = raw_input("Give a number: ")

        if number.isdigit():
            return number
        else:
            print("This input is invalid.")
0
    if number.isdigit():
            return number

    else:

        raise ValueError('Not a valid input value.')

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

2

你没有看到异常语句被执行的原因,是因为在你的try块里面没有任何代码会引发异常。不过,如果你传给int构造函数的东西不是数字,它会引发一个ValueError异常。

根据我的理解,在这种情况下,尝试转换输入,然后捕获异常,是最符合Python风格的输入验证方式。你可以在这个链接中了解更多关于Python异常的内容。

def getnumber():
    while True:
        try:
            return int(input("Give a number: "))
        except ValueError:
            print("This input is invalid.")

你需要确保在main函数中调用getnumber的地方,去掉所有int的调用。另外,还有一点要注意,通常情况下,导入语句应该放在文件的最上面。如果你想了解更多,可以查看PEP8

撰写回答