如何测试任何类型的值是否可以表示整数

时间:2017-07-12 22:11:02

标签: python

  

写一个函数integer_type,它消耗任何类型的值,如果是偶数整数则产生“偶数整数”,如果它是奇整数则产生“奇数”,否则产生“非整数”。

我的代码:

def integer_type(som):
    if type(som)==type(0):
        if som%2==0:
        return "Even integer"
        else:
        return "Odd integer"
    else:
        return "Not an integer"
x= input()
print(integer_type(x))

每当我运行它时,无论我输入什么值,它都会打印“非整数”。

我尝试了与elifs不同的问题而且没有任何区别。我仍然获得了我打印的最后一个“其他”回报。

  

编写一个消耗任何类型数据的函数off_peak,并确定该时间是否符合非峰值速率。您的函数应生成以下输出之一:“Off peak”,“Peak”和“Not a time”。非峰值率基于24小时时间,小于9或大于17的值。

def off_peak(any):
    if type(any)==type(0) and any<9 and any>17:
        return "Off peak"
    elif type(any)==type(0) and 9<any<17 and 0<any<23:
        return "Peak"
    else:
        return "Not a time"

x= input("Peak Dector:")
print(off_peak(x))

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:1)

我认为你应该在比较前将输入转换为int:

print(integer_type(int(x)))

答案 1 :(得分:1)

你的功能是正确的,并且完全符合你的要求,这里的问题是input()总是返回一个字符串,所以当你将它的输出传递给integer_type()时,它会看到它&#39 ; sa string并返回Not an integer。 要查看此内容,请尝试使用以下代码:

def integer_type(som):
if type(som)==type(0):
    if som%2==0:
        return "Even integer"
    else:
        return "Odd integer"
else:
    return "Not an integer"
x= 'integer?'
y = 5
z = 4
print(integer_type(x))
print(integer_type(y))
print(integer_type(z))

它会打印出您想要的内容:

Not an integer
Odd integer
Even integer

答案 2 :(得分:1)

我假设您正在使用Python 3.

input总是返回一个字符串。您首先要测试的是此字符串是否可以表示有效整数。

您可以简单地尝试转换它,并且如果发生错误,您将知道它无效(在这种情况下为ValueError)。

如果我们希望函数接受任何类型的输入,包括浮点数和字符串,如&#34; 3.00&#34;或任何对象,事情会变得复杂一些。您可以像这样重写您的函数:

def integer_type(value):
    # int("3.00") would raise a ValueError, though 3 is an odd integer.
    # We start by converting our input value to a float. 
    # float(value) will accept integers, floats or strings,
    # it will raise a TypeError for None or other invalid types.
    try:
        value = float(value)
    except (ValueError, TypeError):
        # If it isn't a float, it's definitely not an integer
        return "Not an integer"

    # Now we check that our float is an integer:
    if not value.is_integer():
        return "Not an integer"

    if value % 2 == 0:
        return "Even integer"
    else:
        return "Odd integer"

函数的输入可以是字符串,整数,浮点数等等。是否可以将其转换为有效整数,它将始终给出预期结果:

print(integer_type(3))
print(integer_type("3"))
# Odd integer
# Odd integer
print(integer_type(3.1))
print(integer_type("3.1"))
# Not an integer
# Not an integer
print(integer_type(3.00))
print(integer_type("3.00"))
# Odd integer
# Odd integer
print(integer_type(-4.00))
print(integer_type("-4.00"))
# Even integer
# Even integer
print(integer_type("abc"))
# Not an integer
print(integer_type(None))
# Not an integer

如果您使用的是Python 2,请将input替换为raw_input