问题描述:
有一个卡车司机肇事后想逃跑,但是被三个人看见了其车牌号,但是都没看全,甲说:车牌的前两位是一样的;乙说:车牌的后两位一样的,但与前两位不一样;丙说:车牌是一个数字的平方。
请编写一个程序计算该车牌号是多少(车牌号4位数)。
我的代码:
import math
for i in range(0,10):
for j in range(0,10):
s=i*1000+i*100+j*10+j
if i!=j and math.sqrt(s).is_integer():
print s
结果:
7744
我的思路:代码很好懂,也容易想到思路,关键的地方在于如何判断车牌是否为一个数的平方,当时想到了两种方法:一是直接判断,因为最小的车牌号为0011,最大的车牌号为9988。那么平方根范围就是在3到100之间,但是有个问题,使用math函数开平方后显示的要么是xx.0这种浮点整数类型值,要么是xx.xxx这种浮点类型值,根本不会在范围内,那么只有第二个方法了,那就是判断开平方后的数是否为浮点型整数类型的数,这就好办了,只需要一个is_integer()函数就行了;
示例代码:
import math
def FindHim():
for x in xrange(10):
for y in xrange(10):
if x != y:
result = x * 1100 + y * 11
test = math.sqrt(result)
if test.is_integer():
return result
print FindHim()
总结:
判断浮点型整数(如10.0)的方法
1.is_integer()函数
如果浮点实例是有限的整数型值则返回True,否则返回False
参考文档:https://docs.python.org/2/library/stdtypes.html#additional-methods-on-float
例如:
>>> 1.5.is_integer()
False
>>> 1.0.is_integer()
True
>>> 1.414213234.is_integer()
False
2.也可以使用round函数
语法格式:
round(number[, ndigits])
将number的小数点四舍五入到ndigits个数字,默认ndigits为0,返回的结果为浮点类型;
>>> def verfiy(num):
return ('float', 'int')[round(num) == float(num)]
>>> verfiy(10)
'int'
>>> verfiy(10.0)
'int'
>>> verfiy(10.01)
'float'
好吧,虽然例子看起来不恰当,但也是一种解决办法,不过看来is_integer函数还是最简单的呀!