请用您熟悉的编程语言,编程实现一个比较任意两个软件版本号大小的函数,如 1.2.3a 和 1.2.4b 比较,后者版本号更大,请考虑各种情况,不可以使用系统提供的比较函数。
def version_cmpare(v1, v2):
if v1 == v2:
return 0
a_list = v1.split('.')
b_list = v2.split('.')
str_length = len(b_list) if len(a_list)>len(b_list) else len(a_list)
for i in range(str_length):
temp1 = a_list[i]
temp2 = b_list[i]
if confirm_num(temp1) and confirm_num(temp2):
ret = int(temp1) - int(temp2)
if ret == 0:
continue
return 1 if ret > 0 else -1
else:
temp1_list = temp1.split()
temp2_list = temp2.split()
temp_length = len(temp2_list) if len(temp1_list) > len(temp2_list) else len(temp1_list)
for j in range(temp_length):
t1 = temp1_list[j]
t2 = temp2_list[j]
# 纯数字比较
if confirm_num(t1) and confirm_num(t2):
ret2 = int(t1) - int(t2)
if ret2 == 0:
continue
return 1 if ret2 > 0 else -1
# 纯字母比较
elif (not confirm_num(t1)) and (not confirm_num(t2)):
if t1 == t2:
continue
return 1 if t1 > t2 else -1
# 数字字母混合比较 默认数字小于字母
else:
return -1 if confirm_num(t1) else 1
# 遍历长度相等的元素也一样完成后情况下执行的操作
if len(a_list) != len(b_list):
return 1 if len(a_list) > len(b_list) else -1
return 0
def confirm_num(elem):
return elem.isdigit()
print(version_cmpare(v1=“1.2.3x”, v2=“1.2.33b”))
print(version_cmpare(v1=“1.0.0”, v2=“1.0.1”))
print(version_cmpare(v1=" 1.0.2", v2=“1.0.1”))
print(version_cmpare(v1=“1.0.1”, v2=“1.0.1”))
print(version_cmpare(v1=“1.0.11”, v2=“1.0.22”))