我最初写的是:
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)
我对结果并不满意,但至少它有效。任何意见?建议?
答案 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'