You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python切片截取多位数时丢失后续数字,原因及修复方案?

数字截断问题的原因及修复方法

问题背景

完成Python作业时要求仅使用:切片方法处理字符串,但发现三位数及以上的数字会被截断,单词处理正常。相关代码、输入及输出情况如下:

原始代码

import sys 

# set up for for loop
length = len(sys.argv)

for i in range(1, length):
   strg = sys.argv[i]
   #finds name
   index = strg.find(':')
   name  = strg[:index]
   strg  = strg[index+1:]
   
   index = strg.find(',')
   total  = 0
   count  = 0
   while (index != -1):
       group = strg[:index]
       try:
           num = int(group)
       except:
           break
       else:       
           print(num)    
           total = total+num
           count = count+1
           strg = strg[index+1:]
       
   print(count)
   avg = total/count
   print(name+", average:", avg)

输入命令

python script.py Neda:90,80,70,90,50 John:80,100,30 Mary:20,100,90,80

当前输出

90
80
70
90
50
5
Neda, average: 76.0
80
10
2
John, average: 45.0
20
10
2
Mary, average: 15.0

预期输出

90
80
70
90
50
5
Neda, average: 76.0
80
100
30
3
John, average: 70.0
20
100
90
80
4
Mary, average: 72.5

问题原因

核心问题出在while循环内未更新index的值:

  • 每次处理完一个数字切片后,代码仅更新了strg为剩余字符串,但没有重新调用strg.find(',')获取新的逗号位置。
  • 以John:80,100,30为例,第一次找到的逗号在80后(索引2),处理完80后strg变为100,30,但index仍为2,切片strg[:2]会取到10而非完整的100。
  • 后续循环中strg变为0,30,切片取0转int正常,但处理后strg变为,30,此时index还是2,strg[:2]是,3,转int触发异常直接break,导致后续数字被丢弃。

修复方案

在每次更新strg后,重新调用strg.find(',')更新index,同时补充处理最后一个无逗号的数字:

import sys 

# set up for for loop
length = len(sys.argv)

for i in range(1, length):
   strg = sys.argv[i]
   #finds name
   index = strg.find(':')
   name  = strg[:index]
   strg  = strg[index+1:]
   
   index = strg.find(',')
   total  = 0
   count  = 0
   while (index != -1):
       group = strg[:index]
       try:
           num = int(group)
       except:
           break
       else:       
           print(num)    
           total = total+num
           count = count+1
           strg = strg[index+1:]
           # 关键修复:更新index为新字符串中的逗号位置
           index = strg.find(',')
   
   # 处理最后一个没有逗号的数字
   if strg:
       try:
           num = int(strg)
           print(num)
           total += num
           count += 1
       except:
           pass
   print(count)
   avg = total/count
   print(name+", average:", avg)

内容的提问来源于stack exchange,提问作者Jeremy Wasson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:05:59