首页 > 解决方案 > 使用python的版本比较错误

问题描述

我有以下 python 代码比较两个版本 v1 和 v2 并输出以下内容:

0 = version's are same
1 = v1 > v2
-1 = v2 > v1

代码如下:

class Solution(object):
    def compareVersion(self, version1, version2):

        n1, n2 = len(version1), len(version2)
        i, j = 0, 0
        while i < n1 or j < n2:
            v1, v2 = 0, 0
            while i < n1 and version1[i] != '.':
                v1 = v1*10 + int(version1[i])
                i += 1
            while j < n2 and version2[j] != '.':
                v2 = v2*10 + int(version2[j])
                j += 1
            if v1 != v2:
                return 1 if v1 > v2 else -1
            i += 1
            j += 1

        return 0

if __name__ == "__main__":
    print (Solution().compareVersion("2.10", "2.06"))

上面的代码输出如下,因为 v1> v2。

1

但是,当我键入

if __name__ == "__main__":
    print (Solution().compareVersion("2.1", "2.06"))

输出是

-1`

如何在此处解决此问题,由于缺少零,输出不正确。

标签: pythonpython-3.x

解决方案


在点处拆分字符串并将数字视为整数:

>>> version_string = "2.06"
>>> version_as_integers = tuple(int(segment) for segment in version_string.split('.'))
>>> version_as_integers
(2, 6)

然后,只需比较版本:

if version_1_as_integers < version_2_as_integers:
    return -1
elif version_1_as_integers == version_2_as_integers:
    return 0
else:
    return 1

完整的解决方案:

def version_to_integers(version_string):
    return tuple(int(segment) for segment in version_string.split('.'))

def compare_versions(version_string_1, version_string_2):
    v1 = version_to_integers(version_string_1)
    v2 = version_to_integers(version_string_2)
    return ((v1 > v2) - (v1 < v2))

最后一行是来自codegolf.stackexchange.com 问题的技巧


推荐阅读