检查输入是否为浮点数
check if an input is a float
我开始学习 Python 并尝试构建一个简单的计算器。我想让我的程序检查 number_1
和 number_2
是否真的是浮点数,如果不是,则重新开始计算。有人知道我的问题的解决方案吗?
def calculate():
operator = input("What operator do you wanna use(*,/,+,-)? ")
possible_op = ["*", "+", "-", "/"]
possible_classes = ["<class 'float'>", "<class 'int'>"]
if operator not in possible_op:
calculate()
number_1 = float(input("What is your first number? "))
if number_1.type != "Float" or "Int":
calculate()
number_2 = float(input("What is your second number? "))
if (type(number_2)) not in possible_classes:
calculate()
if operator == "+":
print(number_1 + number_2)
elif operator == "-":
print(number_1 - number_2)
elif operator == "*":
print(number_1 * number_2)
elif operator == "/":
print(number_1 / number_2)
else:
print("Wrong Input")
calculate()
again()
float()
将始终 return 一个 float
或引发一个 ValueError
,因此没有必要在你之后检查 return 的类型呼叫 float()
;要么它是 float
要么你永远不会到达那行代码,因为未捕获的异常将结束函数的执行。相反,您想使用 try/except
:
try:
number_1 = float(input("What is your first number? "))
number_2 = float(input("What is your second number? "))
except ValueError:
return calculate()
请注意,在 Python 中使用递归循环通常不是一个好主意,因为 Python 不像许多其他语言那样优化尾调用。相反,您应该使用 while
,例如:
possible_op = {
"*": float.__mul__,
"+": float.__add__,
"-": float.__sub__,
"/": float.__truediv__,
}
while True:
operator = input("What operator do you wanna use(*,/,+,-)? ")
if operator not in possible_op:
continue
try:
number_1 = float(input("What is your first number? "))
number_2 = float(input("What is your second number? "))
except ValueError:
continue
print(possible_op[operator](number_1, number_2))
break
不要对这种循环使用递归。请记住,每次递归调用都会使用越来越多的内存来保存所有新的局部变量。
此外,您的“错误输入”子句永远不会被击中 -- 您已经检查过该运算符是您支持的运算符之一。
def calculate():
while True:
operator = input("What operator do you wanna use(*,/,+,-)? ")
possible_op = "+-*/"
if operator not in possible_op:
continue
try:
number_1 = float(input("What is your first number? "))
number_2 = float(input("What is your second number? "))
except ValueError:
continue
if operator == "+":
print(number_1 + number_2)
elif operator == "-":
print(number_1 - number_2)
elif operator == "*":
print(number_1 * number_2)
elif operator == "/":
print(number_1 / number_2)
break
type()
方法 returns 作为参数传递的参数的 class 类型。您必须检查 returned class 类型是否是 class、float.
的实例
你可以这样做,
isinstance(number_1, float)
这将 return 一个布尔值。如果 number_1
是浮点值,它将 return True
,否则它将 return False
.
也许这可以帮助你,是一个单独的函数,如果给定的数字是浮点数 return True or False
def is_float(number):
if isinstance(number, float):
return True
else:
return False
您可以像这样在您的代码中调用它,在这种情况下您将数字 number_1 作为参数传递:
if is_float(number_1):
# do something
您可以使用 .isnumeric()
检查用户是否输入了数字,方法如下:
number1 = input("What is your first number? ")
number2 = input("What is your second number? ")
if number1.isnumeric() and number2.isnumeric():
number1 = float(number1)
number2 = float(number2)
.isnumeric()
检查字符串中的所有内容是否都是数字。如果是这样它 returns True
否则它 returns False
请注意,如果该数字有小数点,它将 return False
。您可以拆分小数点后面的数字和小数点前面的数字,然后检查它们是否都是数字。但是最好只使用 try-except
语句。但是,如果您只想要整数,那么 .isnumeric()
非常适合您
那应该可以,谢谢。
您的 possible_classes
列表是字符串列表,而不是 class。 "<class 'int'>"
是 type
对象的字符串表示,而不是类型对象本身,因此 type(1) in ["<class 'int'>"]
总是 return False
.
我建议使用其他一些人建议的 try/except 方法或对单个 class 使用 isinstance()
,但如果您特别想检查多个列表class是的,像这样的东西可以工作:
possible_classes = [float, int]
# instead of possible_classes = ["<class 'float'>", "<class 'int'>"]
if type(var) not in possible_classes:
# ...
我开始学习 Python 并尝试构建一个简单的计算器。我想让我的程序检查 number_1
和 number_2
是否真的是浮点数,如果不是,则重新开始计算。有人知道我的问题的解决方案吗?
def calculate():
operator = input("What operator do you wanna use(*,/,+,-)? ")
possible_op = ["*", "+", "-", "/"]
possible_classes = ["<class 'float'>", "<class 'int'>"]
if operator not in possible_op:
calculate()
number_1 = float(input("What is your first number? "))
if number_1.type != "Float" or "Int":
calculate()
number_2 = float(input("What is your second number? "))
if (type(number_2)) not in possible_classes:
calculate()
if operator == "+":
print(number_1 + number_2)
elif operator == "-":
print(number_1 - number_2)
elif operator == "*":
print(number_1 * number_2)
elif operator == "/":
print(number_1 / number_2)
else:
print("Wrong Input")
calculate()
again()
float()
将始终 return 一个 float
或引发一个 ValueError
,因此没有必要在你之后检查 return 的类型呼叫 float()
;要么它是 float
要么你永远不会到达那行代码,因为未捕获的异常将结束函数的执行。相反,您想使用 try/except
:
try:
number_1 = float(input("What is your first number? "))
number_2 = float(input("What is your second number? "))
except ValueError:
return calculate()
请注意,在 Python 中使用递归循环通常不是一个好主意,因为 Python 不像许多其他语言那样优化尾调用。相反,您应该使用 while
,例如:
possible_op = {
"*": float.__mul__,
"+": float.__add__,
"-": float.__sub__,
"/": float.__truediv__,
}
while True:
operator = input("What operator do you wanna use(*,/,+,-)? ")
if operator not in possible_op:
continue
try:
number_1 = float(input("What is your first number? "))
number_2 = float(input("What is your second number? "))
except ValueError:
continue
print(possible_op[operator](number_1, number_2))
break
不要对这种循环使用递归。请记住,每次递归调用都会使用越来越多的内存来保存所有新的局部变量。
此外,您的“错误输入”子句永远不会被击中 -- 您已经检查过该运算符是您支持的运算符之一。
def calculate():
while True:
operator = input("What operator do you wanna use(*,/,+,-)? ")
possible_op = "+-*/"
if operator not in possible_op:
continue
try:
number_1 = float(input("What is your first number? "))
number_2 = float(input("What is your second number? "))
except ValueError:
continue
if operator == "+":
print(number_1 + number_2)
elif operator == "-":
print(number_1 - number_2)
elif operator == "*":
print(number_1 * number_2)
elif operator == "/":
print(number_1 / number_2)
break
type()
方法 returns 作为参数传递的参数的 class 类型。您必须检查 returned class 类型是否是 class、float.
你可以这样做,
isinstance(number_1, float)
这将 return 一个布尔值。如果 number_1
是浮点值,它将 return True
,否则它将 return False
.
也许这可以帮助你,是一个单独的函数,如果给定的数字是浮点数 return True or False
def is_float(number):
if isinstance(number, float):
return True
else:
return False
您可以像这样在您的代码中调用它,在这种情况下您将数字 number_1 作为参数传递:
if is_float(number_1):
# do something
您可以使用 .isnumeric()
检查用户是否输入了数字,方法如下:
number1 = input("What is your first number? ")
number2 = input("What is your second number? ")
if number1.isnumeric() and number2.isnumeric():
number1 = float(number1)
number2 = float(number2)
.isnumeric()
检查字符串中的所有内容是否都是数字。如果是这样它 returns True
否则它 returns False
请注意,如果该数字有小数点,它将 return False
。您可以拆分小数点后面的数字和小数点前面的数字,然后检查它们是否都是数字。但是最好只使用 try-except
语句。但是,如果您只想要整数,那么 .isnumeric()
非常适合您
那应该可以,谢谢。
您的 possible_classes
列表是字符串列表,而不是 class。 "<class 'int'>"
是 type
对象的字符串表示,而不是类型对象本身,因此 type(1) in ["<class 'int'>"]
总是 return False
.
我建议使用其他一些人建议的 try/except 方法或对单个 class 使用 isinstance()
,但如果您特别想检查多个列表class是的,像这样的东西可以工作:
possible_classes = [float, int]
# instead of possible_classes = ["<class 'float'>", "<class 'int'>"]
if type(var) not in possible_classes:
# ...