如何在Python中将'2.0'视为整数而'2.1'视为浮点数?
我想让用户在输入字母或非整数数字时收到错误提示。如果输入的是整数,程序就会继续显示这个整数的平方和立方。我的老师不希望代码中有任何'中断'或者'值错误'。
print("Squaring and cubing integer program has started") #Introduction of program for user
UserNumber=input("Enter an integer to be raised to the power of 2 and 3: ") #Asks user to input an integer, that will then be raised to the power of 2 and 3
while '.' in UserNumber or UserNumber.isalpha(): #Error-trap to test if input contained letters of the alphabet or contains decimal point
print("You have not entered an integer. Try again and enter an integer!") #Alert for user to inform that their entry was invalid (not an integer)
UserNumber=input("Enter an integer to be raised to the power of 2 and 3: ") #Asks user again to enter an integer, if they did not previously.
print(int(UserNumber), " is the integer you entered.") #Displays to user their inital integer
print(int(UserNumber), " squared is ", int(UserNumber)**2) #Displays to user their input integer squared
print(int(UserNumber), " cubed is ", int(UserNumber) **3 ) #Displays to user their input integer cubed
print("Calculations are now finished.") #Output to show program has ended
4 个回答
x = 2.0
try:
x = int(x)
except ValueError:
pass
return x
在Python中,这种方式是唯一可以接受的。如果你的老师不懂异常处理,那他就不应该教Python编程(说实话,他根本不应该教编程)。
A) 我不想去掉任何数字 B) 我想检查用户输入的内容是否不是整数,比如字母和小数(不是像2.0、1.0这样的,因为它们分别等于2和1)
根据你的描述,你可以使用 re
模块来实现你的需求:
import re
def is_integer(num):
s = str(num)
return re.match('^(-?\d+)(\.[0]*)?$', s) is not None
print is_integer(1123123) # True
print is_integer(1123123.) # True
print is_integer(1123123.00000) # True
print is_integer(1123123.00100) # False
这个问题是基于一个课堂作业。这个回答假设解决方案必须符合老师设定的规则。
只需要去掉末尾的零,然后再去掉最后的小数点:
UserNumber = UserNumber.rstrip('0').rstrip('.')
把这一行放在input
语句之后,但在进行测试之前:
print("Squaring and cubing integer program has started") #Introduction of program for user
UserNumber=input("Enter an integer to be raised to the power of 2 and 3: ") #Asks user to input an integer, that will then be raised to the power of 2 and 3
UserNumber = UserNumber.rstrip('0').rstrip('.')
while '.' in UserNumber or UserNumber.isalpha(): #Error-trap to test if input contained letters of the alphabet or contains decimal point
print("You have not entered an integer. Try again and enter an integer!") #Alert for user to inform that their entry was invalid (not an integer)
UserNumber=input("Enter an integer to be raised to the power of 2 and 3: ") #Asks user again to enter an integer, if they did not previously.
UserNumber = UserNumber.rstrip('0').rstrip('.')
print(int(UserNumber), " is the integer you entered.") #Displays to user their inital integer
print(int(UserNumber), " squared is ", int(UserNumber)**2) #Displays to user their input integer squared
print(int(UserNumber), " cubed is ", int(UserNumber) **3 ) #Displays to user their input integer cubed
print("Calculations are now finished.") #Output to show program has ended
2.0
不是一个整数,它是一个浮点数。在Python中,float
类似于标准的IEEE 754浮点数(如果你的平台支持IEEE 754浮点数,那么Python可能也在使用它),这种浮点数的精度是有限的。而整数在Python中是无限精度的(直到你用完内存为止):
>>> i = 123456789012345678901234567890
>>> i == 123456789012345678901234567890
True
>>> f = i * 1.0 # make it a float
>>> f.is_integer() # check whether it is a whole number
True
>>> f == 123456789012345678901234567890
False
除非你确定混合使用浮点数和整数不会影响结果,否则不要这样做。例如,2 == 2.0
是真的,但在更大的数字情况下,这个判断可能会变成假。
你的老师可能希望你找到 .is_integer()
这个方法:
>>> 2.0 .is_integer()
True
>>> 2.1 .is_integer()
False
另外,你可以查看这个链接,了解 如何检查一个浮点值是否是整数。
要把 '2.0'
转换成浮点数,你可以使用 float()
函数:
#!/usr/bin/env python3
while True:
try:
f = float(input('Enter a number: '))
except ValueError:
print('Try again')
else:
break # got a number
这是在Python中从标准输入获取数字的正确方法。如果你的老师不允许使用 ValueError
和 break
,那么你可以使用正则表达式:
if re.match("^[+-]? *(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?$", input_string):
这个表达式可以接受 20e-1 == 2.0 == 2
。你可以查看这个链接 提取浮点/双精度值。
要检查输入是否不为空,并且只包含十进制数字,也就是检查它是否是一个非负整数,你可以使用 input_string.isdecimal()
方法,如果不允许调用 int(input_string)
并捕获 ValueError
的话。你可以查看这个链接 如何检查字符串是否是数字。