0

我今天已经发布了一个问题,它有两个问题。其中一个解决得很好,然后就有点复杂了。所以请原谅我,但我将另一个问题单独发布,因为它混淆了一些窥视:

我是python新手,所以提前道歉。任何帮助深表感谢。我已经被这个代码困住了 2 周了,我的视野很狭隘,无法解决:

基本上,我们的任务是掌握面向对象的编程。不幸的是,我们不得不使用很多人不喜欢的“get”和“set”,但是,根据我们的导师,我们必须这样做。我们被告知 tp 创建一个程序,向用户呈现一个带有 3 个选项的屏幕。1.添加学生。2. 查看学生和 3. 删除学生.. 在我的 AddStudent 函数中,我必须要求用户输入 fname Lname age degree 学习 ID 号(这些是简单的位)以及每个模块的模块名称和等级,我已经设法创建了一个循环,它会一遍又一遍地要求用户输入模块和相应的等级,并且当用户在 modulname 字段中输入 -1 时会中断所述循环。但是,当尝试将其保存到名为 students[] 的列表中时... (它在我的代码的所有函数的最顶部,显然使它成为全局)它保存来自用户的所有输入:年龄名称等,但是当涉及到保存模块名称和等级时,它只保存最后一个输入而不是我需要的多个输入。我不确定它是在我的 AddStudent 函数中它没有保存还是在我的 ViewStudent 函数中:两者都在下面(记住我必须使用 GET 和 SET malarky);)

students[] # Global List

def addStudent():
    print 
    print "Adding student..."
    student = Student()
    firstName = raw_input("Please enter the student's first name: ")
    lastName = raw_input("Please enter the student's last name: ")
    degree = raw_input("Please enter the name of the degree the student is studying: ")
    studentid = raw_input("Please enter the students ID number: ")
    age = raw_input("Please enter the students Age: ")

    while True:
        moduleName = raw_input("Please enter module name: ") 
        if moduleName == "-1":
            break
        grade = raw_input ("Please enter students grade for " + moduleName+": ")

    student.setFirstName(firstName) # Set this student's first name
    student.setLastName(lastName)
    student.setDegree(degree)# Set this student's last name
    student.setGrade(grade)
    student.setModuleName(moduleName)
    student.setStudentID(studentid)
    student.setAge(age)
    students.append(student)
    print "The student",firstName+' '+lastName,"ID number",studentid,"has been added to the system."

………………………………………………………………………………

def viewStudent():
    print "Printing all students in database : "

    for person in students:
            print "Printing details for: " + person.getFirstName()+" "+ person.getLastName()
            print "Age: " + person.getAge()
            print "Student ID: " + person.getStudentID()
            print "Degree: " + person.getDegree()
            print "Module: " + person.getModuleName()
            print "Grades: " + person.getGrade()
4

2 回答 2

0

您的问题是该模块是您不断更改的单个变量。相反,让它成为一个列表。

while True:
        moduleName = raw_input("Please enter module name: ") 
        if moduleName == "-1":
            break
        grade = raw_input ("Please enter students grade for " + moduleName+": ")

应该是这样的

modules = []

while True:
        moduleName = raw_input("Please enter module name: ") 
        if moduleName == "-1":
            break
        grade = raw_input ("Please enter students grade for " + moduleName+": ")
        modules.append((moduleName, grade))

添加一个新变量,student它是“模块”并且是一个列表。

然后modules将是一个元组列表,(moduleName, grade)要显示它们,请从以下位置更改行viewstudent

        print "Module: " + person.getModuleName()
        print "Grades: " + person.getGrade()

到:

for module, grade in person.getModules():
       print "Module: " + module
       print "Grades: " + grade
于 2013-01-03T13:52:23.193 回答
0

看来你需要这样的东西:

modules = {}

while True:
    module_name = raw_input("Please enter module name: ") 
    if module_name:
        grade = raw_input ("Please enter students grade for " + module_name +": ")
        modules[module_name] = grade

模块是一个字典(其他语言中的“哈希映射”),每个模块名称都是键,等级是值,或者你也可以用元组来做,无论你的船漂浮在哪里。

不是检查 -1 作为停止条件,而是检查是否为真,在 python 中,任何空的都被评估为假。

于 2013-01-03T14:38:44.063 回答