Board logo

标题: [原创代码] python解无忧公主数学题108回文.py [打印本页]

作者: codegay    时间: 2016-3-8 06:48     标题: python解无忧公主数学题108回文.py

  1. """
  2. python解无忧公主数学题108回文.py
  3. 题目来源: http://mp.weixin.qq.com/s?__biz=MzI5ODEwMDQyNw==&mid=402360973&idx=1&sn=31014f87b8e65c9cd1d40c625c9c3d90&3rd=MzA3MDU4NTYzMw==&scene=6#rd
  4. 2016年3月7日 14:59:17 codegay
  5. """
  6. #利用到了集合的特性,进行集合交集运算
  7. #2016年3月8日 05:59:41
  8. def 方法1():
  9.     f=lambda x,y: x if str(x*y)==str(x*y)[::-1] else None
  10.     x91={f(r,91) for r in range(1,100) if f(r,91)}
  11.     x93={f(r,93) for r in range(1,100) if f(r,93)}
  12.     x95={f(r,95) for r in range(1,100) if f(r,95)}
  13.     x97={f(r,97) for r in range(1,100) if f(r,97)}
  14.     print("方法1结果:",x91&x93&x95&x97)
  15.     return (x91&x93&x95&x97)
  16. 方法1()
  17. #2016年3月8日 06:23:32
  18. def ff2():
  19.    
  20.     def f(x,y):
  21.         if str(x*y)==str(x*y)[::-1]:
  22.             return x
  23.         
  24.     results=[r for r in range(1,100) if f(r,91) and f(r,93) and f(r,95) and f(r,97)]
  25.     print("方法2结果:",results)
  26.     #2016年3月8日 06:40:33
  27.     return results
  28. ff2()
  29.         
复制代码

作者: codegay    时间: 2016-3-8 07:31

  1. #2016年3月8日 06:59:08
  2. #用正则匹配写一个
  3. import re
  4. def ff3():
  5.     def f(x,y):
  6.         if re.match(r"""^(\d?)(\d?)(\d?)(\d?)\4\3\2\1$""",str(x*y)):
  7.             return True
  8.     x91=[r for r in range(1,100) if f(r,91)]
  9.     results=[r for r in x91 if f(r,93) and f(r,95) and f(r,97)]
  10.     print("方法3结果:",results)
  11.     #2016年3月8日 07:29:33
  12. ff3()
复制代码

作者: codegay    时间: 2016-3-8 07:49

想了想,可以完全可以省掉if语句。
  1. """
  2. python解无忧公主数学题108回文.py
  3. 题目来源: http://mp.weixin.qq.com/s?__biz=MzI5ODEwMDQyNw==&mid=402360973&idx=1&sn=31014f87b8e65c9cd1d40c625c9c3d90&3rd=MzA3MDU4NTYzMw==&scene=6#rd
  4. 2016年3月7日 14:59:17 codegay
  5. """
  6. #利用到了集合的特性,进行集合交集运算
  7. #2016年3月8日 05:59:41
  8. def 方法1():
  9.     f=lambda x,y: str(x*y)==str(x*y)[::-1]
  10.     x91={r for r in range(1,100) if f(r,91)}
  11.     x93={r for r in range(1,100) if f(r,93)}
  12.     x95={r for r in range(1,100) if f(r,95)}
  13.     x97={r for r in range(1,100) if f(r,97)}
  14.     print("方法1结果:",x91&x93&x95&x97)
  15.     return (x91&x93&x95&x97)
  16. 方法1()
  17. #2016年3月8日 06:23:32
  18. def ff2():
  19.    
  20.     def f(x,y):
  21.         return str(x*y)==str(x*y)[::-1]
  22.         
  23.     results=[r for r in range(1,100) if f(r,91) and f(r,93) and f(r,95) and f(r,97)]
  24.     print("方法2结果:",results)
  25.     #2016年3月8日 06:40:33
  26.     return results
  27. ff2()
  28.         
  29. #2016年3月8日 06:59:08
  30. #用正则匹配写一个
  31. import re
  32. def ff3():
  33.     def f(x,y):
  34.         return re.match(r"""^(\d?)(\d?)(\d?)(\d?)\4\3\2\1$""",str(x*y))
  35.     x91=[r for r in range(1,100) if f(r,91)]
  36.     results=[r for r in x91 if f(r,93) and f(r,95) and f(r,97)]
  37.     print("方法3结果:",results)
  38.     #2016年3月8日 07:29:33
  39. ff3()
复制代码

作者: codegay    时间: 2016-3-8 09:20

  1. #2016年3月8日 08:39:02
  2. #再尝试改进一下写法
  3. def ff4():
  4.     l=[91,93,95,97]
  5.     f=lambda x,iters: False not in [str(x*r)==str(x*r)[::-1] for r in iters]
  6.     results=[r for r in range(1,100) if f(r,l)]
  7.     print("方法4结果:",results)
  8.     #2016年3月8日 09:17:07
  9. ff4()
  10.    
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2