Python列表编程:获取群体最年轻者完整信息的问题求助
问题分析与解决方案
代码存在的核心问题
- 把姓名、年龄、身份证号分别存在三个独立列表中,三者没有关联关系:调用
min(persons)得到的是姓名字典序最小的名字,min(numbers_of_citizen_card)得到的是身份证号数值最小的号码,和最小年龄的人完全不匹配。 - 循环中复用了变量
i:最初i是输入的人数,循环for i in range(0, i)会把i覆盖为循环的索引值,导致后续if (i > 999)的判断完全失效(比如输入1000人,循环结束后i是999,永远不会触发提示)。
修正后的代码
用列表存储字典,把每个人的姓名、年龄、身份证号作为一个整体存储,直接关联对应信息:
persons = [] # 先获取人数并做合法性判断 person_count = int(input('请输入群体人数:')) if person_count > 999: print('无法注册超过999人。') else: # 录入每个人的信息 for _ in range(person_count): name = input('请输入姓名:') age = int(input('请输入年龄:')) n_cc = input('请输入身份证号:') # 身份证号用字符串存储,避免前导零丢失或数值过大问题 persons.append({ 'name': name, 'age': age, 'citizen_card': n_cc }) # 找到年龄最小的人 youngest = min(persons, key=lambda x: x['age']) print(f"群体中最年轻的人是{youngest['name']},年龄{youngest['age']},身份证号{youngest['citizen_card']}。")
额外说明
- 身份证号用字符串存储更合理:如果身份证号以0开头,转成整数会丢失前导零;而且身份证号长度超过整数范围时会报错,字符串能完美避免这些问题。
- 用
min()函数的key参数指定按年龄排序,直接从列表中取出年龄最小的完整信息字典,不需要手动匹配索引。
内容的提问来源于stack exchange,提问作者Gonçalo_Gomes
相关产品推荐
相关产品推荐

