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

Python编程问题:实现根据性别计算成员平均年龄的函数

问题分析与解决方案

你的代码存在的问题

  • 打印位置错误:print(names)写在循环内部,每匹配到一个符合条件的成员就会执行一次打印,所以会逐次输出列表的更新状态。
  • 全局变量隐患:names定义在函数外部,属于全局变量,多次调用average_age时,列表会不断累积之前调用的结果,导致数据混乱。
  • 偏离需求逻辑:题目要求计算对应性别成员的平均年龄,但你当前代码在收集姓名,完全没有处理年龄相关的计算逻辑。

正确实现代码

def average_age(members, gender):
    # 在函数内部初始化年龄列表,避免全局变量问题
    ages = []
    for member in members:
        # 匹配指定性别,收集年龄(元组第二个元素,索引为1)
        if member[2] == gender:
            ages.append(member[1])
    # 判断是否有匹配结果
    if not ages:
        return 'No matches found.'
    # 计算平均年龄:总和除以数量
    return sum(ages) / len(ages)

测试验证

用题目给出的示例数据测试:

members = [('John', 36, 'M'), ('Rachel', 24, 'F'), ('Deardrie', 78, 'F'), ('Ahmed', 17, 'M'), ('Sienna', 14, 'F')]

# 测试男性平均年龄
print(average_age(members, 'M'))  # 输出:26.5
# 测试女性平均年龄
print(average_age(members, 'F'))  # 输出:38.666666666666664
# 测试无匹配的情况
print(average_age(members, 'X'))  # 输出:No matches found.

额外优化建议

可以用列表推导式简化筛选年龄的步骤,让代码更简洁:

def average_age(members, gender):
    ages = [member[1] for member in members if member[2] == gender]
    return sum(ages)/len(ages) if ages else 'No matches found.'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:22:17