版本号比较

版本号比较

# -*- coding: utf-8 -*-
__author__ = 'Eggsy'
__date__ = '2019/5/6 13:36'


def compare1(a, b):
    la = a.split('.')
    lb = b.split('.')
    f = 0
    if len(la) > len(lb):
        f = len(la)
    else:
        f = len(lb)
    for i in range(f):
        try:
            if int(la[i]) > int(lb[i]):
                return a  # a > b
            elif int(la[i]) == int(lb[i]):
                continue
            else:
                return b  # a < b
        except IndexError as e:
            if len(la) > len(lb):
                return a   # a > b
            else:
                return b   # a < b
    return a    # a = b

def compare2(a, b):
    '''比较两个版本的大小,需要按.分割后比较各个部分的大小,只能比较版本号为纯数字构成的字符串,如"1.0.10",无法比较带字母的版本号如"a1.0.1".'''
    lena = len(a.split('.'))  # 获取版本字符串的组成部分
    lenb = len(b.split('.'))
    a2 = a + '.0' * (lenb-lena)  # b比a长的时候补全a
    b2 = b + '.0' * (lena-lenb)
    print(a2, b2)
    for i in range(max(lena, lenb)):  # 对每个部分进行比较,需要转化为整数进行比较
        if int(a2.split('.')[i]) > int(b2.split('.')[i]):
            return a
        elif int(a2.split('.')[i]) < int(b2.split('.')[i]):
            return b
        else:						# 比较到最后都相等,则返回第一个版本
            if i == max(lena, lenb)-1:
                return a

def compare3(a, b):
    l_1 = a.split('.')
    l_2 = b.split('.')
    c = 0
    while True:
        if c == len(l_1) and c == len(l_2):
            return a #相等
        if len(l_1) == c:
            l_1.append(0)
        if len(l_2) == c:
            l_2.append(0)
        if int(l_1[c]) > int(l_2[c]):
            return a #a>b
        elif int(l_1[c]) < int(l_2[c]):
            return b #a<b
        c += 1

def compare4(version1, version2):
    lena = len(version1.split('.'))  # 获取版本字符串的组成部分
    lenb = len(version2.split('.'))
    a2 = version1 + '.0' * (lenb - lena)  # b比a长的时候补全a
    b2 = version2 + '.0' * (lena - lenb)
    if a2 == b2:
        return version1
    nversion1 = [int(x) for x in a2.split('.')]
    nversion2 = [int(x) for x in b2.split('.')]
    while version1 and version2:
        x, y = nversion1.pop(0), nversion2.pop(0)
        if x < y:
            return version2
        if x > y:
            return version1

def compare5(version1,version2):
    if version1 == version2:
        return version1
    nversion1 = [int(x) for x in version1.split('.')]
    nversion2 = [int(x) for x in version2.split('.')]
    while nversion1 and nversion2:
        x, y = nversion1.pop(0), nversion2.pop(0)
        if x < y:
            return version2
        if x > y:
            return version1
    # version1或version2不完整:
    if nversion1 and any(x > 0 for x in nversion1):
        return version1
    if nversion2 and any(x > 0 for x in nversion2):
        return version2
    return version1

if __name__ == '__main__':

    versions = ['1.0.10','1.0.9','1.0.11','1.01', '2.3', '2.12', '2.1.0', '0.0.01.3']
    tags=[u'2.0.1', u'1.0.10', u'1.0.2', u'1.0.3', u'1.0.4', u'1.0.5', u'1.0.6', u'1.0.7', u'1.0.8', u'1.0.9',u'1.0.11',u'1.0.12']
    last = u'0.0'   # 给个初始值进行比较
    for version in tags:
        last = compare1(last, version)  # 每次将较大的版本取出,留给下次比较
    print(last)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值