簡體   English   中英

python計算器:檢查輸入有效性

[英]python Calculator: Checking input validity

我的代碼似乎工作正常,但是它沒有打印例外: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()

之所以看不到異常語句被執行,是因為try塊中沒有代碼會引發異常。 但是,如果int的構造函數傳遞的不是數字,則將引發ValueError異常。

根據我的理解,在這種情況下,嘗試轉換然后捕獲異常是驗證輸入的最有效方法。 您可以在docs中閱讀有關Python中異常的更多信息。

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

您需要確保從main中所有對getnumber的調用中刪除對int的調用。 另外,最后一點。 將意料之外的import語句放在文件頂部被認為是適當的形式。 如果您想了解更多信息,可以在PEP8上閱讀。

嘗試這個:

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

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

    else:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM