Python自动创建字典:我的代码为何失效?正确实现方式是什么?
嘿,我来帮你排查下代码的问题,这跟Codecademy的环境没关系,是代码逻辑的小问题~
先看你原代码的几个核心问题:
- 函数里创建的字典只是给循环变量
names赋值了,但完全没把这些字典保存或返回出来,函数执行完后这些字典就直接被丢弃了,所以你看不到任何结果 - 名字没有处理成首字母大写的格式,不符合题目要求
- 循环里直接给
names变量赋值,根本不会修改原列表里的元素
下面给你两种符合需求的正确实现方式:
方式一:返回学生字典列表(推荐,符合Python最佳实践)
这种方式会把所有学生的字典收集到一个列表里返回,方便后续统一处理:
def make_student_dicts(names): student_list = [] for name in names: # 把名字转成首字母大写、其余小写的标准格式 formatted_name = name.capitalize() student_dict = { "name": formatted_name, "homework": [], "quizzes": [], "tests": [] } student_list.append(student_dict) return student_list # 调用函数生成学生字典 student_names = ["lloyd", "alice", "tyler"] students = make_student_dicts(student_names) # 测试输出 print(students[0]) # 输出: {'name': 'Lloyd', 'homework': [], 'quizzes': [], 'tests': []} print(students[1]) # 输出: {'name': 'Alice', 'homework': [], 'quizzes': [], 'tests': []}
方式二:创建单独的变量(如lloyd、alice、tyler)
如果你的课程要求必须生成三个单独命名的变量,可以用动态创建全局变量的方式(但这种方式在实际开发中不推荐,容易导致代码混乱):
def create_individual_students(names): for name in names: formatted_name = name.capitalize() # 动态生成和名字对应的全局变量 globals()[name] = { "name": formatted_name, "homework": [], "quizzes": [], "tests": [] } # 执行函数创建变量 student_names = ["lloyd", "alice", "tyler"] create_individual_students(student_names) # 现在可以直接使用这三个变量 print(lloyd) print(alice)
调整后的代码就能正常运行啦,核心就是要把创建好的字典存储起来(要么放到列表里返回,要么绑定到变量上),而不是只是给循环变量赋值就完事~
内容的提问来源于stack exchange,提问作者noam compsci
相关产品推荐
相关产品推荐

