我正在为我的计算机科学课做作业,作业要求我们获取输入并确定输入是否是有效整数以及输入是否为浮点数(2个问题)。
我已经完成了大部分工作,但唯一让我烦恼的部分是输入是字母数字(即123dfkj
)。我尝试使用
while not num.isdigit():
但是当用户输入为负时会出现问题。
答案 0 :(得分:2)
通过转换输入并使用try / except块来捕获异常,这是相对简单的。
val = input()
try:
int(val)
except ValueError:
print("Not an integer")
try:
float(val)
except ValueError:
print("Not a float")
答案 1 :(得分:1)
最简单的方法是遵循EAFP原则并将输入转换为integer
并捕获异常(如果不是。)
EAFP比请求更容易请求宽恕。这个常见的Python 编码风格假定存在有效的键或属性 如果假设被证明是假的,则捕获异常。这干净又快 风格的特点是存在许多尝试和除外 声明。该技术与许多人共同的LBYL风格形成鲜明对比 其他语言,如C.
try:
myint = int(myinput)
except ValueError:
# myinput was not an integer
答案 2 :(得分:0)
另一种解决方案是使用正则表达式。
浮动:^-?[1-9]{1}[0-9]*.{1}[0-9]*$
整数:^-?[1-9]{1}[0-9]*$
但是,这不考虑使用“e”作为指数(例如6.022e23)
答案 3 :(得分:0)
请注意这些其他答案,建议只需转换为int
,因为任何浮点值都可以截断成功。
您可能需要检查该值的浮点表示是否等于其整数表示,以便例如3和3.0将计为整数但不计为3.5。
>>> def is_it_a_number(value):
... try:
... float(value)
... print('It can be represented as floating point!')
... except ValueError:
... print('It cannot be represented as floating point.')
... else:
... try:
... if float(value) == int(float(value)):
... print('It is a valid integer.')
... except ValueError:
... print('It is not a valid integer.')
...
>>> is_it_a_number(3)
It can be represented as floating point!
It is a valid integer.
>>> is_it_a_number(-3)
It can be represented as floating point!
It is a valid integer.
>>> is_it_a_number(3.0)
It can be represented as floating point!
It is a valid integer.
>>> is_it_a_number(3.5)
It can be represented as floating point!
>>> is_it_a_number('3.0')
It can be represented as floating point!
It is a valid integer.
>>> is_it_a_number('3.5')
It can be represented as floating point!
>>> is_it_a_number('sandwich')
It cannot be represented as floating point.