用户输入两个版本号 v1 和 v2,请编写代码比较它们,找出较新的版本。
v1 = input("请输入第一个版本号,v1 = ")v2 = input("请输入第二个版本号,v2 = ")
n, m = len(v1), len(v2)
i, j = 0, 0
while i < n or j < m:
x = 0
while i < n and v1 != '.':
x = x * 10 + int(v1)
i += 1
i += 1
y = 0
while j < m and v2 != '.':
y = y * 10 + int(v2)
j += 1
j += 1
if x > y:
print("v1")
break
elif x < y:
print("v2")
break
if x == y:
print("v1 = v2")
有点搞不明白,第一个为什么要用x = x * 10 + int(v1)来测算版本号,
第二个,为什么有一个i += 1,后面还要加一个 i+= 1
跪求大佬指点一下 本帖最后由 jackz007 于 2022-11-28 22:16 编辑
假如 v = '12.3'那么,v 是一个字符串,要比版本号,需要把字符串中的整数部分 '12' 变成整型数 12,以便比较大小。
下面的代码就是为了分别从字符串字符串 v1 、v2 中提取整型数 x、y
x = 0
while i < n and v1 != '.':
x = x * 10 + int(v1)
i += 1
i += 1
y = 0
while j < m and v2 != '.':
y = y * 10 + int(v2)
j += 1
至于 i += 1 和 j += 1 完全是为了这个:
while i < n or j < m:
是的,没错,他们位于循环的主干执行通道,是每一次都必须执行到的语句,为的就是 while 不至于成为死循环。
代码过于繁琐,下面是我写的代码,谨供楼主参考。
v1 = input("请输入第一个版本号,v1 = ")
v2 = input("请输入第二个版本号,v2 = ")
x = int(v1 . split('.')) if '.' in v1 else int(v1)
y = int(v2 . split('.')) if '.' in v2 else int(v2)
print('v1 = v2') if v1 == v2 else print('v1') if v1 > v2 else print('v2') 本帖最后由 gywjj 于 2022-11-28 22:19 编辑
第一个,可以通过循环把带小数的版本号转换为整数。为什么不直接转数值呢,我觉得是因为有些版本号不只一个小数点,无法直接转为数值,比如1.23.45,需要用X*10可以转换。第一个+1是小while。第二个是大循环,主要是为了提高效率,以小数点分割进行对比。
页:
[1]