如何检查输入类型?

时间:2015-05-05 16:55:32

标签: python python-2.7 input

我最初写的是:

n = input('How many players? ')
while type(n) != int or n <= 2:
    n = input('ERROR! The number of players must be an integer bigger than 2! How many players? ')

然后,经过几行后,这个:

V = input("What's the value? ")
while type(V) != int and type(V) != float:
    V = input("ERROR! The value must be expressed in numbers!"+"\n"+"What's the value? ")

在第一次测试后,我意识到我需要使用raw_input而不是输入。 但后来我需要重写while循环。我不希望程序破裂;我想检查输入并发送消息错误,以防类型不是问题。

如果我使用raw_input,我如何检查输入是整数还是浮点数,因为type(n)和type(V)都是字符串(使用raw_input)?

P.S。对于V,如果它是一个整数,我希望将该值存储为整数,如果它是一个浮点数,则将其存储为浮点数

更新 : 我已经解决了第一段代码的问题:

n = None
while n <= 2 :
    try:
        n = int(raw_input('How many players? '))
    except ValueError:
        print 'ERROR! The number of players must be expressed by an integer!'

但我仍然不知道如何解决第二段代码的问题。除非我信任用户,否则我不知道如何存储V的值,如果它是一个浮点数,那么它将是一个浮点数,如果它是一个int。

更新#2 - 问题已解决 : 对于第二部分,我提出了这些:

while *condition in my program*:
    try:
        V = float(raw_input("what's the value? "))
    except ValueError:
        print "ERROR! The value of the coalition must be expressed in numbers!"
if V - int(V) == 0:
    V = int(V)    

我对结果并不满意,但至少它有效。任何意见?建议?

1 个答案:

答案 0 :(得分:-2)

你可以test if a string is a number使用:

def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

要解决您的问题,请尝试此

import sys

number = False
while not number:
    value = raw_input("What's the value? ")
    number = is_number(value)
    if not number:
        print >> sys.stderr , 'Error: Admitted only numeric value. Try again' 

您可以test if value is a flaot or a integer并根据内置函数isinstance()的结果与eval()组合存储,因为raw_input始终返回一个字符串。

if isinstance(eval(value),float):
    #store the value here as float
    print 'Your input was a float value'
elif isinstance(eval(value),int):
    #store the value here as int
    print 'Your input was a int value'