一、版本号比较的困难

不能直接以字符串形式进行比较:对于1.3和1.4直接以字符串进行比较是可以正确得出1.4比1.3大;但如果是1.3和1.14还直接进字符串比较那就是1.3比1.14大那就不对了。

不能直用用数值类型进行比较:如果版本号是1和2那可以自接以整型进行比较,如果是1.3和1.4可以直接以浮点型进行比较;但如果是1.3.1和1.4.1这种形式,那整型和浮点型都不能用了。

二、版本号比较实现思路

最关键的点就是每次取一节版本号、转换成整型进行比较;比如1.2.3和1.2.14,先比较1,再比较2,最后再比较3得14。

三、实现

3.1 实现效果

3.2 实现代码

compare_version----递归实现版本比较

pick_up_latest_version----调用compare_version,打印最终的版本比较结果

# version1----第一个要比较的版本字符串
# version2----第二个要比较的版本字符串
# split_flag----版本分隔符,默认为".",可自定义
# 返回值----相等返回0,version1比version2大返回1,version2比version1大返回2
# 接受的版本字符形式----空/x/x.y/x.y./x.y.z;两个参数可为前边列出的形式的任一种
def compare_version(version1=None,version2=None,split_flag="."):
# 如果存在有为空的情况则进入
if (version1 is None) or (version1 == "") or (version2 is None) or (version2 == ""):
# version1为空且version2不为空,则返回version2大
if ((version1 is None) or (version1 == "")) and (version2 is not None) and (version2 != ""):
return 2
# version2为空且version1不为空,则返回version1大
if ((version2 is None) or (version2 == "")) and (version1 is not None) and (version1 != ""):
return 1 # 如果版本字符串相等,那么直接返回相等,这句会且只会在第一次比较时才可能进入
# version1和version2都为空时也会进入这里
if version1 == version2:
return 0 # 对版本字符串从左向右查找".",第一个"."之前的字符串即为此次要比较的版本
# 如1.3.5中的1
try:
current_section_version1 = version1[:version1.index(split_flag)]
except:
current_section_version1 = version1
try:
current_section_version2 = version2[:version2.index(split_flag)]
except:
current_section_version2 = version2
# 对本次要比较的版本字符转成整型进行比较
if int(current_section_version1) > int(current_section_version2):
return 1
elif int(current_section_version1) < int(current_section_version2):
return 2 # 如果本次传来版本字符串中已没有版本号分隔符,那说明本次比较的版本号已是最后一位版本号,下次比较值赋空
# 如本次传来的是5,那下次要比较的只能赋空
try:
other_section_version1 = version1[version1.index(split_flag)+1:]
except:
other_section_version1 = ""
try:
other_section_version2 = version2[version2.index(split_flag) + 1:]
except:
other_section_version2 = "" # 递归调用比较
return compare_version(other_section_version1,other_section_version2) # 此函数调用compare_version(),打印比较结果
def pick_up_latest_version(version1,version2):
flag = compare_version(version1,version2)
if flag == 0:
print(f"version1 = {version1}, version2 = {version2}, the two version is equal")
elif flag == 1:
print(f"version1 = {version1}, version2 = {version2}, the latest version is version1 {version1}")
elif flag == 2:
print(f"version1 = {version1}, version2 = {version2}, the latest version is version2 {version2}")

Python3版本号比较代码实现的更多相关文章

  1. python3下载远程代码并执行

    第一步: 先在gist之类的网站上贴上代码,目的不是高亮,而可以raw的形式获取代码,这样可以省掉处理html的时间,我这里用的是pasteraw: 远程上的代码:http://cdn.pastera ...

  2. 7、Cocos2dx 3.0游戏开发找小三之3.0版本号的代码风格

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27691337 Cocos2d-x代码风格 前面我们已 ...

  3. python3 实现对代码文件中注释的翻译

    心血来潮,昨天看见群里讨论一段图片转pdf的代码,直接拿过来发现不能用,原来是因为代码中传的文件对象不对,源码中说传递的是一个文件路径或一个文件对象.他传的是一个文件名,很是尴尬. 想了想,主要原因还 ...

  4. linux下python3调用c代码或者python3调用c++代码

    前几篇的blog都是为了这个实验做基础,先说 原因是python调用数据库150w条数据22s,然后处理数据,其实就2个简单的for循环,65s 需求: 1. python调用c++函数 2. c++ ...

  5. python3 80行代码实现贪吃蛇

    上面是实现的截图,废话不说,直接开始说一下代码 pos = { 'UP': (-1,0), 'DOWN':(+1,0), 'LEFT':(0,-1), 'RIGHT':(0,+1), } curren ...

  6. 轻盈潇洒卓然不群,敏捷编辑器Sublime text 4中文配置Python3开发运行代码环境(Win11+M1 mac)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_210 20世纪初,几乎所有的飞机都是并列双翼结构,此时,美国著名飞行大亨霍华德·休斯认为自己的飞机不够快,助手委婉地提醒他,如果速 ...

  7. Python3 多线程下载代码

    根据http://www.oschina.net/code/snippet_70229_2407修改而来的增强版.貌似原版源自Axel这个多线程下载工具. ''' Created on 2014-10 ...

  8. iOS 检查版本号的代码

    - (void)checkNewVersion{ if ([@"appStore" isEqualToString:CHANNEL]) { AFHTTPRequestOperati ...

  9. python3 关联规则Apriori代码模版

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- from numpy import * def loadDataSet(): return [['a', ...

随机推荐

  1. redis集群cluster简单设置

    环境: 这里参考官方使用一台服务器:Centos 7  redis-5.0.4    192.168.10.10 redis集群cluster最少要3个主节点,所以本次需要创建6个实例:3个主节点,3 ...

  2. Java自学-I/O 中文问题

    Java中的编码中文问题 步骤 1 : 编码概念 计算机存放数据只能存放数字,所有的字符都会被转换为不同的数字. 就像一个棋盘一样,不同的字,处于不同的位置,而不同的位置,有不同的数字编号. 有的棋盘 ...

  3. Spark GraphX图计算核心算子实战【AggreagteMessage】

    一.简介 参考博客:https://www.cnblogs.com/yszd/p/10186556.html 二.代码实现 package graphx import org.apache.log4j ...

  4. Python之request模块-基础用法

    Request模块参考中文手册:https://requests.readthedocs.io/zh_CN/latest/ Request模块 1.查看pip已装包(模块)的安装信息(模块的路径.版本 ...

  5. 【Spring Cloud】Spring Cloud之自定义@SpringCloudProfile注解实现@Profile注解的功能

    一.为什么会想到定义@SpringCloudProfile这样的注解 首页提一下@Profile注解:它主要用与Spring Boot多环境配置中,指定某个类只在指定环境中生效,比如swagger的配 ...

  6. 创建readonly只读用户脚本

    身为一名运维工作人员,保证服务器的安全是必要项,当开发人员或测试人员需登录到服务器查看日志等操作时,可只给定特定的权限防止误操作的惨况产生. 以下脚本内容均为我本人环境,如有更改可自行修改. ~]# ...

  7. CentOS设置静态IP及Samba等基础设置

    1. CentOS7设置静态IP CentOS的网卡IP配置文件/etc/sysconfig/network-scripts/ifcfg-网卡名字. 配置参数解析: BOOTPROTO="s ...

  8. 详解数据库引擎与SQL语句增删改查(非常详细,带例)

    数据库系统(DBMS): 专门负责数据管理的工具.增加数据.创建索引.建立索引之间的关联关系.更新索引...... 连接器:PHP要访问MySQL,可以通过API访问,也可以通过PHP的驱动,而那个驱 ...

  9. VMware Xcode真机调试

    原因如下:VMware12默认使用usb3.0 ,先给苹果系统关机,然后打开虚拟机设置,更改usb控制器为USB2.0 就可以成功连接了. 问题提示:could not launch “name” p ...

  10. LOJ 2249: 洛谷 P2305: bzoj 3672: 「NOI2014」购票

    题目传送门:LOJ #2249. 题意简述: 有一棵以 \(1\) 号节点为根节点的带边权的树. 除了 \(1\) 号节点的所有节点上都有人需要坐车到达 \(1\) 号节点. 除了 \(1\) 号节点 ...