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
相关产品推荐
相关产品推荐

