我有以下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&gt; V2
1
但是当我输入
时if __name__ == "__main__":
print (Solution().compareVersion("2.1", "2.06"))
输出
-1`
如何解决此问题,由于缺少零,输出不正确。
答案 0 :(得分:3)
将字符串拆分为点并将数字视为整数:
>>> 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))
的技巧
答案 1 :(得分:-1)
通过一些研究和@zvone和@DeepSpace对原帖的评论。我发现了这个:
版本不是浮点数,因此它们不属于十进制数类别,因此十进制数算术不适用于版本控制。根据语义版本2.0.0(https://semver.org/#spec-item-2),版本号不应该跟前导零。因此,2.06是一种糟糕的版本控制方式。一开始应该是2.1,2.6等。如果您遵循语义版本2.0.0,您可以避免这种困境。
答案 2 :(得分:-4)
转换为浮点而不是int
>>> i = "2.10"
>>> j = "2.06"
>>> float(i) > float(j)
True
>>> i = "2.1"
>>> float(i) > float(j)
True