问题描述:

有一个卡车司机肇事后想逃跑,但是被三个人看见了其车牌号,但是都没看全,甲说:车牌的前两位是一样的;乙说:车牌的后两位一样的,但与前两位不一样;丙说:车牌是一个数字的平方。
请编写一个程序计算该车牌号是多少(车牌号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函数还是最简单的呀!


题目地址:http://www.cheemoedu.com/exercise/8