Python按重量区间统计包裹数量代码出错,请求排查
问题分析与修正代码
原代码的错误点:
- 输入分割后得到的是字符串列表,未转换为数值类型,无法进行重量区间的数值比较
- 使用了
range(...) from weight这种Python不存在的语法,属于完全错误的筛选方式 - 对字符串列表直接排序会按字典序(比如"10"会排在"2"前面),排序逻辑错误
- 区间范围定义错误:
range(0,5)只包含0-4,不包含5,不符合需求的0-5区间;同理6-10、11-25的range范围都遗漏了上限值
修正后的代码:
# 欢迎语 print("Hello Welcome to ACME GRocery Store ") # 获取包裹重量输入,处理为数值列表 # 示例输入:10, 20, 38, 49, 18, 29, 10, 39 weight_input = input("Please enter the weight's of all packages with commas in between: ") # 分割字符串并去除空格,转换为整数列表 weights = [int(w.strip()) for w in weight_input.split(",")] # 对数值列表排序 weights.sort() # 统计各区间包裹数量 small_count = sum(1 for w in weights if 0 <= w <=5) medium_count = sum(1 for w in weights if 6 <= w <=10) large_count = sum(1 for w in weights if 11 <= w <=25) extra_large_count = sum(1 for w in weights if w >=26) print("Amount of packages submitted = ", len(weights)) print("Amount of small packages submitted = ", small_count) print("Amount of medium packages submitted = ", medium_count) print("Amount of large packages submitted = ", large_count) print("Amount of extra large packages submitted = ", extra_large_count)
关键修改说明:
- 类型转换:通过列表推导式将分割后的字符串转换为整数,同时用
strip()处理输入中可能存在的空格(比如输入"10, 20"中的空格) - 正确筛选:使用生成器表达式结合
sum()统计符合区间的数量,逻辑清晰且符合Python语法 - 区间修正:直接用数值比较明确区间范围,避免
range左闭右开特性导致的边界遗漏 - 排序修复:先转换为数值列表再排序,保证排序结果是按重量大小排列
内容的提问来源于stack exchange,提问作者Car vroom
相关产品推荐
相关产品推荐

