在Python中检查负数的最佳方法

8hhllhi2  于 2023-10-21  发布在  Python
关注(0)|答案(2)|浏览(125)

我知道两种方法来检查输入不是负数,但我想知道哪一种是最好的。我越来越熟悉python,但我仍然很困惑,当我有两个选择时,什么是最好的。如果你看到任何其他的方法,请让我知道,以及我正在努力学习。非常感谢你
第一个选择(我的教授):

def get_quantity():
    while True:
        try:
            quantity = int(input("Enter quantity: "))
            if quantity > 0:
                return quantity
            else:
                print("Invalid integer. Please try again.")
        except ValueError:
            print("Invalid integer. Please try again.")

第二个选择(我的):

def get_quantity():
    while True:
        try:
            quantity = int(input("Enter quantity: "))
            neg_test = math.sqrt(quantity)
            return quantity
        except ValueError:
            print("Invalid integer. Please try again.")
whlutmcx

whlutmcx1#

我认为第一种方法更好,你只是比较quantity0
在第二种方法中,需要额外的开销import math模块或math模块的sqrt()功能。
另外,当你给予一个负数给sqrt()函数时,你会得到:

ValueError: math domain error

这个ValueError将被except块捕获。
在第二个选项中,每次您给予负数或任何不是数字except块将被执行。
在第一个选项中,如果您给予一个负数或零,else将被执行;
如果你给予任何不是一个数字except块将被执行。

u3r8eeie

u3r8eeie2#

我不喜欢第一个版本的地方是它在elseexcept下有相同的“块”。所以我的建议是:

def get_quantity():
    while True:
        try:
            quantity = int(input("Enter quantity: "))
            if quantity > 0:
                return quantity
            raise ValueError()
        except ValueError:
            print("Invalid integer. Please try again.")

另一种选择是在将字符串转换为整数之前检查字符串是否为数字,从而排除负号:

def get_quantity():
    while True:
        quantity = input("Enter quantity: ")
        if quantity.isnumeric():
            return int(quantity)
        print("Invalid integer. Please try again.")

相关问题