检查数字是否有小数的最快方法

时间:2021-01-23 16:14:45

标签: python

我正在输入代码来检查数字是否为正数、负数以及是否有小数。有没有更快的方法来检查小数点?

n = input("Type a number: ")
try:
    n = int(n)
    if n > 0:
        print("n is positive")
    elif n < 0:
        print("n is negative")
    else:
        print("n is zero")
except ValueError:
    n = float(n)
    if n > 0:
        print("n is positive and decimal")
    elif n < 0:
        print("n is negative and decimal")
    else:
        print("n is zero")
print(n)
input()

5 个答案:

答案 0 :(得分:1)

跟进评论 (1, 2):OP 问题中提出的代码很好。

然而,如果我们想避免将字符串转换为数字类型和使用异常的成本,我们也可以依靠正则表达式来直接断言所提供文字的符号和类型。

例如,通过编写如下内容:

#!/usr/bin/env python3
import re

def process(txt):

    pat = re.compile(r'^(-)?[0-9]+(\.[0-9]+)?$')

    grep = pat.match(txt)

    print(txt, 'is:')

    if grep is None:
        print('not a numeric string')
    else:
        if grep.group(1) is None:
            print('some ', end='')
        else:
            print('some negative ', end='')
        if grep.group(2) is None:
            print('integer')
        else:
            print('decimal')

process('-12')
process('-12.5')
process('12')
process('12.5')
process('foo')
process(500*'9')
process(str(input("Type a number: ")))

答案 1 :(得分:0)

您始终可以使用 float 然后检查 .is_integer() 方法:

n = float(input("Type a number: "))


if n > 0:
    print("n is positive")
elif n < 0:
    print("n is negative")
else:
    print("n is zero")

if n.is_integer():
    print("n is integral")
else:
    print("n isn't integral")

print(n)
input()

要明确:现在 n总是具有 float 类型,即使用户输入例如2is_integer 只是告诉您浮点数是否可以表示为整数。

在浮点数的限制下,这将不再可靠地工作:

>>> float("12345678901234567.5").is_integer()
True
>>> float("1"+ "0"*309).is_integer()
False

答案 2 :(得分:0)

假设您正在寻找专门的“小数”而不仅仅是浮点数,您可以使用使用 floor 函数制作的这个学校教授的算法。

>>> import math
>>> def is_int(x):
...     y=math.floor(x)+math.floor(-x)
...     if y==0:
...             print("It's an integer")
...     if y==-1:
...             print("It's a decimal")
...
>>> is_int(1)
It's an integer
>>> is_int(1.3)
It's a decimal

答案 3 :(得分:0)

这是使用 ![image|12x12](https://www.flaticon.com/svg/vstatic/svg/497/497738.svg?token=exp=1611421025~hmac=7f2922952f84017ad7e06a850bb5ce66) 运算符的另一个版本。

%

答案 4 :(得分:-1)

简单的方法

n = input("Type a number: ")

if n.find("."):
    print("n is decimal")
elif n>0:
    print("n is positive")
elif n<0:
    print("n is negative")
elif n==0:
    print("n is 0")
else:
    print("n is something else")
print(n)

您可以通过这种方式轻松检查它是否为十进制。但是,如果你想检查它是否是十进制整数。然后,尝试以下源代码

if n.find(".") and n>0:
    print("n is positive decimal")
elif n.find(".") and n<0:
    print("n is negative decimal")

你必须把它写在上面而不是写在下面。甚至,您可以将其替换为

if n.find("."):
    print("n is decimal")

因为,在这里您要检查它是否为十进制。但是,在此代码上方,您正在检查它是否为负十进制。所以,你可以更换它。