大佬们帮忙康康这个代码怎么会出现这种BUG
import operatordef v_split(v1,v2):
"""比较两个版本号,结果返回最新版本号"""
sp_1 =
sp_2 =
len_p = len(sp_1) - len(sp_2)
if len_p > 0:
sp_2.extend( * len_p)
elif len_p < 0:
sp_1.extend( * (-len_p))
for i,p in enumerate(sp_1):
ret = operator.eq(p,sp_2)#版本号1与版本号2等值
reb = operator.gt(p,sp_2)#版本号1比版本号2大
red = operator.lt(p,sp_2)#版本号2比版本号1大
if ret:
print('v1 = v2')
break
elif reb:
print('v1')
break
else:
print('v2')
break
v1 = input("请输入第一个版本号: ")
v2 = input("请输入第二个版本号: ")
v_split(v1,v2)
测试结果:
请输入第一个版本号: 1.1.1
请输入第二个版本号: 1.2
v1 = v2
乌鱼子,为什么会出现这种情况呢,大佬们,帮帮孩子吧,谢谢啦 import operator
def v_split(v1,v2):
"""比较两个版本号,结果返回最新版本号"""
sp_1 =
sp_2 =
len_p = len(sp_1) - len(sp_2)
if len_p > 0:
sp_2.extend( * len_p)
elif len_p < 0:
sp_1.extend( * (-len_p))
if operator.lt(sp_1,sp_2):
print("v2")
elif operator.gt(sp_1,sp_2):
print('v1')
else:
print('v1 = v2')
v1 = input("请输入第一个版本号: ")
v2 = input("请输入第二个版本号: ")
v_split(v1,v2)
后面查了下operator模块的用法,好像可以这样直接调用,也不知道这样改进可以吗,求大佬帮忙康康 import operator
def v_split(v1,v2):
"""比较两个版本号,结果返回最新版本号"""
sp_1 =
sp_2 =
if operator.lt(sp_1,sp_2):
print("v2")
elif operator.gt(sp_1,sp_2):
print('v1')
else:
print('v1 = v2')
v1 = input("请输入第一个版本号: ")
v2 = input("请输入第二个版本号: ")
v_split(v1,v2)
擦,突然发现operator的功能如此强大,貌似不需要把俩列表等长了,可以直接比较大小了,这特么帅呆了 代码:import operator
def comparison(v1, v2):
ver1 =
ver2 =
size = max(len(ver1), len(ver2))
ver1 = ver1 +
ver2 = ver2 +
for i in range(size):
a, b = ver1, ver2
equal = operator.__eq__(a, b)
greater = operator.__ge__(a, b)
less = operator.__le__(a, b)
if equal:
continue # 这里用要 continue,否则只判断 1 次就退出了
elif greater:
return f"{v1}"
elif less:
return f"{v2}"
return f"{v1} = {v2}"
v1 = input("请输入第一个版本号: ")
v2 = input("请输入第二个版本号: ")
print(comparison(v1, v2))输出结果:请输入第一个版本号: 1.1.1
请输入第二个版本号: 1.2
1.2 好的,我是傻逼,看来还是需要先把俩列表换算成等长,不然又会出现类似【1.0.1】【1.0.1.0】比较之后【1.0.1.0】大的BUG了 qwe2052190 发表于 2021-10-3 10:01
import operator
def v_split(v1,v2):
你都用这个模块了
直接比较就好了
import operator
def v_split(v1, v2):
# """比较两个版本号,结果返回最新版本号"""
# sp_1 =
# sp_2 =
# len_p = len(sp_1) - len(sp_2)
# if len_p > 0:
# sp_2.extend( * len_p)
# elif len_p < 0:
# sp_1.extend( * (-len_p))
# if operator.lt(sp_1, sp_2):
# print("v2:", sp_2)
# elif operator.gt(sp_1, sp_2):
# print('v1:', sp_1)
# else:
# print('v1 = v2')
# -------------------------------------------
if operator.lt(v1, v2):
print("v2:", v2)
elif operator. gt(v1, v2):
print("v1:", v1)
else:
print('v1 = v2')
v1 = input("请输入第一个版本号: ")
v2 = input("请输入第二个版本号: ")
v_split(float(v1), float(v2)) qwe2052190 发表于 2021-10-3 10:06
import operator
def v_split(v1,v2):
直接换成浮点数也行 嘿嘿,谢谢哈,我看到你后面还提到可以直接换成浮点数的吗?那如果版本号是1.01.02.1这种情况的话,也可以吗,嘿嘿 傻眼貓咪 发表于 2021-10-3 10:10
代码:输出结果:
感谢感谢,辛苦啦{:5_101:} qwe2052190 发表于 2021-10-3 10:47
嘿嘿,谢谢哈,我看到你后面还提到可以直接换成浮点数的吗?那如果版本号是1.01.02.1这种情况的话,也可以 ...
还有这种版本号的吗{:10_278:}
我以为就一个正常的浮点数 大马强 发表于 2021-10-3 11:06
还有这种版本号的吗
我以为就一个正常的浮点数
哈哈,可能是我想的奇葩了,的确是没遇到过这种类型的版本号{:5_101:}
页:
[1]