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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:18:06