使用循环简化Python命令行

2024-09-29 23:28:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在自学Python,并一直使用Codecademy作为工具。我已经理解了使用字典的某些键进行编写的基本前提,但是我意识到使用循环将键添加到字典会更容易,特别是如果以后必须修改代码,并且每个字典都有相同的值。但是,我无法让代码返回所需的值:

students = {"lloyd" : [], "alice" : [], "tyler" : []}

for student in students:
    student = {
        "name" : [], 
        "homework" : [], 
        "quizzes" : [], 
        "tests" : []
    }

print students

但结果是:

{'tyler': [], 'lloyd': [], 'alice': []}
None

我该怎么设置,这样。。。它。。。实际上是工作,我有“名字”、“作业”、“考试”和“测验”都在学生的名字下?你知道吗


Tags: 工具代码for字典名字student意识alice
2条回答

首先,你什么都不是。其次,您正在覆盖'student'变量,并且从不保存您创建的值。你应该保持跟踪,或者在进行时修改dict:

students = {"lloyd" : [], "alice" : [], "tyler" : []}

for student in students:
    students[student] = {  # Notice the change here
        "name" : [], 
        "homework" : [], 
        "quizzes" : [], 
        "tests" : []
    }

print students

Python也支持这类的类,尽管您可能还没有接触到教程的这一部分:

class Student: 
    def __init__(self): 
        self.tests = []
        self.quizzes = []
        self.name = ""
        self.homework = []

然后你可以有一些与学生相关的行为:

    def hw_average(self): 
        return sum(self.homework)/len(self.homework) # divide by zero if no homework, so don't actually do this. 

然后你可以和学生互动:

jeff = Student()
jeff.name = "Jeff"
jeff.homework = [85, 92, 61, 78]
jeff.hw_average()  # 79

问题是您正在重新分配循环中的student变量,但原始字典保持不变。 如果您想使用dict来实现这一点,规范的方法是使用工厂函数从模板生成dict,然后使用它来创建学生词典。你知道吗

def make_student(name)
   return  {
    "name" : name,
    "homework" : [],
    "quizzes" : [],
    "tests" : []
   }

students = {name : make_student(name) for name in ['lloyd', 'alice' 'tyler']}
print(students)

也就是说,最好还是上课(根据另一个答案)。你知道吗

相关问题 更多 >

    热门问题