鱼C论坛

 找回密码
 立即注册
查看: 2642|回复: 2

[已解决]用户输入两个版本号 v1 和 v2,请编写代码比较它们,找出较新的版本。

[复制链接]
发表于 2022-11-28 21:46:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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[i] != '.':
        x = x * 10 + int(v1[i])
        i += 1
    i += 1
    y = 0
    while j < m and v2[j] != '.':
        y = y * 10 + int(v2[j])
        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])来测算版本号,
第二个,为什么有一个  i += 1,后面还要加一个 i  += 1
跪求大佬指点一下
最佳答案
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[i] != '.':
        x = x * 10 + int(v1[i])
        i += 1
    i += 1
    y = 0
    while j < m and v2[j] != '.':
        y = y * 10 + int(v2[j])
        j += 1
        至于 i += 1 和 j += 1 完全是为了这个:
while i < n or j < m:
         是的,没错,他们位于循环的主干执行通道,是每一次都必须执行到的语句,为的就是 while 不至于成为死循环。
         代码过于繁琐,下面是我写的代码,谨供楼主参考。
v1 = input("请输入第一个版本号,v1 = ")
v2 = input("请输入第二个版本号,v2 = ")
x = int(v1 . split('.')[0]) if '.' in v1 else int(v1)
y = int(v2 . split('.')[0]) if '.' in v2 else int(v2)
print('v1 = v2') if v1 == v2 else print('v1') if v1 > v2 else print('v2')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[i] != '.':
        x = x * 10 + int(v1[i])
        i += 1
    i += 1
    y = 0
    while j < m and v2[j] != '.':
        y = y * 10 + int(v2[j])
        j += 1
        至于 i += 1 和 j += 1 完全是为了这个:
while i < n or j < m:
         是的,没错,他们位于循环的主干执行通道,是每一次都必须执行到的语句,为的就是 while 不至于成为死循环。
         代码过于繁琐,下面是我写的代码,谨供楼主参考。
v1 = input("请输入第一个版本号,v1 = ")
v2 = input("请输入第二个版本号,v2 = ")
x = int(v1 . split('.')[0]) if '.' in v1 else int(v1)
y = int(v2 . split('.')[0]) if '.' in v2 else int(v2)
print('v1 = v2') if v1 == v2 else print('v1') if v1 > v2 else print('v2')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-28 22:02:49 | 显示全部楼层
本帖最后由 gywjj 于 2022-11-28 22:19 编辑

第一个,可以通过循环把带小数的版本号转换为整数。为什么不直接转数值呢,我觉得是因为有些版本号不只一个小数点,无法直接转为数值,比如1.23.45,需要用X*10可以转换。第一个+1是小while。第二个是大循环,主要是为了提高效率,以小数点分割进行对比。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-25 11:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表