Python入门求助:用函数、循环等改写三人年龄统计程序
解决Python程序中姓名列表调用问题的完整改写方案
完整改写代码
# 定义函数:获取三人的姓名和年龄输入 def get_people_info(): people = [] for i in range(3): name = input(f"请输入第{i+1}个人的姓名:") age = int(input(f"请输入{name}的年龄:")) people.append( (name, age) ) # 用元组存储姓名和年龄,保证一一对应 return people # 定义函数:找出年龄最大和最小的人的姓名 def find_extreme_ages(people): max_age = -1 min_age = float('inf') max_name = "" min_name = "" for name, age in people: if age > max_age: max_age = age max_name = name if age < min_age: min_age = age min_name = name return max_name, min_name # 定义函数:判断年龄对应的类别 def get_age_category(age): if 13 <= age <= 19: return "Teen" elif 20 <= age <= 64: return "Adult" elif age >= 65: return "Senior" else: return "Child" # 处理13岁以下的情况 # 主程序逻辑 if __name__ == "__main__": # 获取人员信息 people_list = get_people_info() # 输出年龄最大和最小的姓名 max_name, min_name = find_extreme_ages(people_list) print(f"\n年龄最大的人是:{max_name}") print(f"年龄最小的人是:{min_name}") # 输出每个人的年龄类别 print("\n每个人的年龄类别:") for name, age in people_list: category = get_age_category(age) print(f"{name}:{category}")
关键问题说明
你之前遇到的无法调用姓名列表中name变量的问题,大概率是因为姓名和年龄分开存储在两个独立列表,遍历的时候没通过索引对应起来,或者遍历方式不对。
上面的代码用了元组列表(每个元素是(姓名, 年龄)),遍历的时候可以直接用for name, age in people的方式,同时取出姓名和年龄,完美解决两者的关联问题,不会出现找不到name的情况。
各模块功能拆解
get_people_info():用for循环收集3次输入,把每一组姓名和年龄打包成元组添加到列表,确保数据绑定不混乱。find_extreme_ages():遍历元组列表,通过条件判断更新最大/最小年龄对应的姓名。get_age_category():用多分支条件判断返回对应的年龄类别,覆盖所有可能的年龄范围。- 主程序:按顺序调用上述函数,完成输入、计算、输出全流程。
测试示例
运行后输入:
请输入第1个人的姓名:张三 请输入张三的年龄:18 请输入第2个人的姓名:李四 请输入李四的年龄:45 请输入第3个人的姓名:王五 请输入王五的年龄:70
输出结果:
年龄最大的人是:王五 年龄最小的人是:张三 每个人的年龄类别: 张三:Teen 李四:Adult 王五:Senior
内容的提问来源于stack exchange,提问作者autumnnum
相关产品推荐
相关产品推荐

