免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1687 | 回复: 6
打印 上一主题 下一主题

编程挑战: 如何比较字符串 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-21 10:24 |只看该作者 |倒序浏览
功能实现要求:
             cmp_version('3.0', '2.19') > 0 => True
             cmp_version('3.0', '3.0') == 0 => True
             cmp_version('3', '3.0') == 0 => True


cmp_version实现要求:
             简洁。
             不准使用for, while。建议用map, reduce, generate这样的东西。
             允许递归。

请大家上代码。

论坛徽章:
0
2 [报告]
发表于 2013-01-21 10:36 |只看该作者
这是我的:
  1. # -*- coding: utf-8 -*-                                                                                                                                       


  2. def _cmp_version(v1_list, v2_list):
  3.     v1 = int(v1_list[0]) if len(v1_list)>0 else 0
  4.     v2 = int(v2_list[0]) if len(v2_list)>0 else 0

  5.     v1_is_empty = len(v1_list) == 0
  6.     v2_is_empty = len(v2_list) == 0
  7.     #                                                                                                                                                         
  8.     if v1_is_empty or v2_is_empty:
  9.         return v1 - v2


  10.     if v1 == v2:
  11.         return _cmp_version(v1_list[1:], v2_list[1:])
  12.     else:
  13.         return v1 - v2



  14. def cmp_version(v1, v2):
  15.     v1_list = v1.split('.')
  16.     v2_list = v2.split('.')

  17.     return _cmp_version(v1_list, v2_list)


  18. if __name__ == "__main__":
  19.     print cmp_version('2.0', '2.0') == 0
  20.     print cmp_version('2', '1.19') == 1
  21.     print cmp_version('2.0', '2.1.0') == -1
复制代码

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
3 [报告]
发表于 2013-01-21 11:09 |只看该作者
看不懂题目呀,比较什么呀?我的理解是比较两个数字的大小,可是如果真这样简单,好像又不用编程实现了。

论坛徽章:
0
4 [报告]
发表于 2013-01-21 11:38 |只看该作者
回复 1# wojiaohesen
这种无聊东东以后别贴了
  1. def cmp_version(v1,v2):
  2.     return float(v1)- float(v2)
复制代码

论坛徽章:
0
5 [报告]
发表于 2013-01-21 11:41 |只看该作者
回复 3# ssfjhh

非常同意,只需要做个类型转换就可以了。

  1. >>> def cmp_version(a,b):
  2. ...     return cmp(float(a),float(b))
  3. ...
复制代码

  1. >>> cmp_version("3.0","2.19")
  2. 1
  3. >>> cmp_version("3.0","3.0")
  4. 0
  5. >>> cmp_version("3.0","3")
  6. 0
复制代码

论坛徽章:
0
6 [报告]
发表于 2013-01-21 20:07 |只看该作者
回复 4# 106033177


    请看题: 2.0.1 compare 2.0?
请回复之前看请要求

论坛徽章:
0
7 [报告]
发表于 2013-01-21 20:10 |只看该作者
回复 1# wojiaohesen
wojiaohesen 发表于 2013-01-21 10:24
功能实现要求:
             cmp_version('3.0', '2.19') > 0 => True
             cmp_version('3.0', '3.0') == 0 => True
             cmp_version('3', '3.0') == 0 => True


cmp_version实现要求:
             简洁。
             不准使用for, while。建议用map, reduce, generate这样的东西。
             允许递归。

请大家上代

请问2.0.1在哪儿?

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP