Python求均值中位数众数实现空列表返0及输入ValueError报错修复
错误原因
输入为空时,input().strip().split(' ') 会得到 [''],将空字符串传给int()转换就会触发你遇到的ValueError。同时现有代码还存在众数逻辑缩进错误、中位数计算优先级错误的问题,会导致返回结果不符合预期。
修复方案
1. 调整输入处理逻辑
先判断输入是否为空,为空直接初始化空列表,不执行类型转换操作。
2. 三个统计函数新增空列表判断
只要输入列表长度为0,直接返回0,避免后续运算报错。
3. 修复现有逻辑bug
- 众数函数的
return原写在遍历字典的for循环内部,只会遍历第一个key就返回,需要调整缩进层级 - 中位数计算逻辑补充括号,避免运算优先级错误
完整修复后代码
# 定义中位数、众数、均值计算函数 def median(enterNumbers): if len(enterNumbers) == 0: return 0 enterNumbers.sort() middle = len(enterNumbers) // 2 if len(enterNumbers) % 2 == 1: return enterNumbers[middle] else: return (enterNumbers[middle] + enterNumbers[middle - 1]) / 2 def mode(enterNumbers): if len(enterNumbers) == 0: return 0 numberDictionary = {} for digit in enterNumbers: number = numberDictionary.get(digit, None) if number is None: numberDictionary[digit] = 1 else: numberDictionary[digit] = number + 1 maxValue = max(numberDictionary.values()) modeList = [] for key in numberDictionary: if numberDictionary[key] == maxValue: modeList.append(key) return modeList def mean(enterNumbers): if len(enterNumbers) == 0: return 0 total = 0 for num in enterNumbers: total += num return total / len(enterNumbers) # 主函数 def main(): input_str = input("Enter Numbers : ").strip() if not input_str: enterNumbers = [] else: enterNumbers = list(map(int, input_str.split(' '))) enterNumbers.sort() print("\n"," Number List ","\n---------------------","\n",enterNumbers) print("\n","median, mode mean?","\n---------------------") answer = input() if answer == "median": res = median(enterNumbers) elif answer == "mode": res = mode(enterNumbers) elif answer == "mean": res = mean(enterNumbers) else: res = "无效输入" print(res) main()
内容的提问来源于stack exchange,提问作者Anther Eros
相关产品推荐
相关产品推荐

