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

sorted()操作扩充列表无法求中位数,如何设置禁止空值加入列表

核心问题定位

你的代码有两处直接导致中位数计算错误的问题:

  1. 未校验输入有效性,若用户输入连续空格、首尾带空格,或者输入非数字内容,会导致后续转换、计算异常
  2. 你排序的对象是原始输入字符串sorted(input_string),而非转换后的数字分数列表,完全用错了排序数据源,和空值关系不大

解决方法

空值过滤逻辑

分割输入后新增空值过滤步骤,即可避免空元素进入列表:

# split默认分割所有空白符,加if判断直接过滤所有空串
user_list = [item for item in input_string.split() if item.strip()]

完整修正代码

同时修复了你原有代码的输入校验死循环、排序对象错误、中位数计算逻辑错误的问题:

import statistics
import time

# 修复分数数量输入校验逻辑,超过10时要求重新输入
while True:
    amount = int(input('你要输入多少个分数?(最多10个)'))
    if amount <= 10:
        break
    print('输入错误,请输入不超过10的数字')
    time.sleep(1)

print(f'输入的分数数量:{amount}')
input_string = input('输入学生分数,用空格分隔:')
print('\n')

# 分割输入并过滤空值
raw_list = input_string.split()
filter_list = [item.strip() for item in raw_list if item.strip()]

# 校验输入数量是否匹配
if len(filter_list) != amount:
    print(f"输入错误:需要输入{amount}个分数,实际输入了{len(filter_list)}个")
    exit()

# 转换为整数列表,校验是否有非数字输入
try:
    score_list = list(map(int, filter_list))
except ValueError:
    print("输入错误:包含非数字内容,请重新运行")
    exit()

print(f'分数列表:{score_list}')
print(f'平均值 = {sum(score_list)/amount:.2f}')

# 对数字列表排序后计算中位数
sorted_score = sorted(score_list)
print(f'排序后的分数列表:{sorted_score}')

if amount % 2 == 0:
    median = (sorted_score[amount//2 - 1] + sorted_score[amount//2]) / 2
else:
    median = sorted_score[amount//2]
print(f'中位数 = {median}')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:06:03