python 請用您熟悉的編程語言,比較兩個軟件版本號大小的函數,如 1.2.3a 和 1.2.4b 比較,後者版本號更大,請考慮各種情況,不可以使用系統提供的比較函數。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章