鱼C论坛

 找回密码
 立即注册
查看: 956|回复: 4

[已解决]关于字符串的问题

[复制链接]
发表于 2022-3-30 22:57:35 | 显示全部楼层 |阅读模式

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

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

x
各位大神,

题目如附件:我的解题思路大概是比较''. ''左边的的int(字符串)大小 ,如果相等,则将v1 /v2 左边消除掉. 进行下一次比较。。。
但是我改了几次都错了,有大神帮我看看错在哪了,应该怎么改么 。。。

'''动动手'''
v1 = input('请输入第一个版本号,v1 = ')
v2 = input('请输入第二个版本号,v2 = ')
loca1 = v1.find('.')
loca2 = v2.find('.')

while (loca1 != -1) and (loca2 != -1):
        left1 = int(v1[:v1.find('.')])
        left2 = int(v2[:v2.find('.')])
        print ([left1,left2])
        if left1 != left2:
            if left1 > left2:
                print('V1')
                break
            else:
                print('V2')
                break
        else:
            v1 = v1[v1.find('.')+1:]
            v2 = v2[v2.find('.')+1:]
            print ([v1,v2])
            loca1 = v1.find('.')
            loca2 = v2.find('.')

else:
    if int(v1) == int (v2):
        print ('v1 = v2')
    print('v1') if int(v1)> int(v2) else print('v2')

最佳答案
2022-3-30 23:39:16
本帖最后由 白two 于 2022-3-30 23:54 编辑

错误原因:
如果有一个提前结束,例如: 1.2.3.4  1.2, 就会导致有一个截取的是 2.3.4 这种格式的字符串, 或者 1.2.3.4 1.2.6 结束的时候是有一个是 3.4, 这两种都不能使用 int 进行转换, 尤其第一种 float 都不行

我的建议是去特殊化, 即所有的输入辨别一下, 都转换为 0.0.0 或者 0.0.0.0 诸如此类这种格式, 然后再挨个比大小
如下
  1. v1 = input('请输入第一个版本号,v1 = ')
  2. v2 = input('请输入第二个版本号,v2 = ')

  3. v1_lst = v1.split('.')
  4. v2_lst = v2.split('.')
  5. while len(v1_lst) < len(v1_lst):
  6.     v1_lst.append('0')
  7. while len(v2_lst) < len(v1_lst):
  8.     v2_lst.append('0')
  9. equal = 1
  10. for i in range(len(v1_lst)):
  11.     num_v1 = int(v1_lst[i])
  12.     num_v2 = int(v2_lst[i])
  13.     if num_v1 > num_v2:
  14.         print(v1)
  15.         equal = 0
  16.         break
  17.     elif num_v1 < num_v2:
  18.         print(v2)
  19.         equal = 0
  20.         break

  21. if equal == 1:
  22.     print('v1 = v2', v1)

复制代码

捕获.JPG
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-30 23:09:02 | 显示全部楼层
你出错的输入是啥
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-30 23:17:13 | 显示全部楼层
大马强 发表于 2022-3-30 23:09
你出错的输入是啥

请输入第一个版本号,v1 = 1.1.0
请输入第二个版本号,v2 = 1.0
Traceback (most recent call last):
  File "C:\Users\zhuzj\Desktop\python\test\29.py", line 24, in <module>
    if int(v1) == int (v2):
ValueError: invalid literal for int() with base 10: '1.0'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-30 23:39:16 | 显示全部楼层    本楼为最佳答案   
本帖最后由 白two 于 2022-3-30 23:54 编辑

错误原因:
如果有一个提前结束,例如: 1.2.3.4  1.2, 就会导致有一个截取的是 2.3.4 这种格式的字符串, 或者 1.2.3.4 1.2.6 结束的时候是有一个是 3.4, 这两种都不能使用 int 进行转换, 尤其第一种 float 都不行

我的建议是去特殊化, 即所有的输入辨别一下, 都转换为 0.0.0 或者 0.0.0.0 诸如此类这种格式, 然后再挨个比大小
如下
  1. v1 = input('请输入第一个版本号,v1 = ')
  2. v2 = input('请输入第二个版本号,v2 = ')

  3. v1_lst = v1.split('.')
  4. v2_lst = v2.split('.')
  5. while len(v1_lst) < len(v1_lst):
  6.     v1_lst.append('0')
  7. while len(v2_lst) < len(v1_lst):
  8.     v2_lst.append('0')
  9. equal = 1
  10. for i in range(len(v1_lst)):
  11.     num_v1 = int(v1_lst[i])
  12.     num_v2 = int(v2_lst[i])
  13.     if num_v1 > num_v2:
  14.         print(v1)
  15.         equal = 0
  16.         break
  17.     elif num_v1 < num_v2:
  18.         print(v2)
  19.         equal = 0
  20.         break

  21. if equal == 1:
  22.     print('v1 = v2', v1)

复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-30 23:41:50 | 显示全部楼层
Victor0321 发表于 2022-3-30 23:17
请输入第一个版本号,v1 = 1.1.0
请输入第二个版本号,v2 = 1.0
Traceback (most recent call last):

把最后的判断的强制钻换改成float
  1. v1 = input('请输入第一个版本号,v1 = ')
  2. v2 = input('请输入第二个版本号,v2 = ')
  3. loca1 = v1.find('.')
  4. loca2 = v2.find('.')

  5. while (loca1 != -1) and (loca2 != -1):
  6.     left1 = int(v1[:v1.find('.')])
  7.     left2 = int(v2[:v2.find('.')])
  8.     print([left1, left2])
  9.     if left1 != left2:
  10.         if left1 > left2:
  11.             print('V1')
  12.             break
  13.         else:
  14.             print('V2')
  15.             break
  16.     else:
  17.         v1 = v1[v1.find('.')+1:]
  18.         v2 = v2[v2.find('.')+1:]
  19.         print([v1, v2])
  20.         loca1 = v1.find('.')
  21.         loca2 = v2.find('.')

  22. else:
  23.     # print(v1, v2)
  24.     if float(v1) == float(v2):
  25.         print('v1 = v2')
  26.     print('v1') if float(v1) > float(v2) else print('v2')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-29 10:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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