twkkndt 发表于 2022-11-28 21:46:09

用户输入两个版本号 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 21:59:56

本帖最后由 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:02:49

本帖最后由 gywjj 于 2022-11-28 22:19 编辑

第一个,可以通过循环把带小数的版本号转换为整数。为什么不直接转数值呢,我觉得是因为有些版本号不只一个小数点,无法直接转为数值,比如1.23.45,需要用X*10可以转换。第一个+1是小while。第二个是大循环,主要是为了提高效率,以小数点分割进行对比。
页: [1]
查看完整版本: 用户输入两个版本号 v1 和 v2,请编写代码比较它们,找出较新的版本。