請用您熟悉的編程語言,編程實現一個比較任意兩個軟件版本號大小的函數,如 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”))