在While循环中使用时将Raw_input保存到列表

时间:2013-01-03 13:42:44

标签: python

我今天已经发布了一个问题,它有2个问题。其中一个完美地解决了,然后它有点复杂。所以请原谅我,但我分别发布另一个问题,因为它混淆了一些窥视:

我是python的新手,所以请提前道歉。任何帮助深表感谢。我现在已经被困在这个代码上2周了,我有隧道视觉,无法解决这个问题:

基本上我们的任务是掌握面向对象编程。不幸的是,我们必须使用“get”和“set”,这是我学到很多人不喜欢的,但是,根据我们的导师,我们必须这样做。我们被告知要创建一个程序,用户将看到一个带有3个选项的屏幕。 1.增加一名学生2.查看学生和3.删除学生..在我的AddStudent功能中我必须要求用户输入fname Lname年龄学习ID号(这些是简单的位)以及每个模块的模块名称和等级,I已经设法创建一个循环,它将一遍又一遍地要求用户输入模块和相应的等级,并且当用户在模名字段中输入-1时将从所述循环中断。但是,当尝试将其保存到名为students []的列表中时...(在我的代码上方位于所有函数之上,显然使其全局化)它会保存来自用户re:age name等的所有输入,但是当它涉及到保存模块名称和等级,它只保存最后一个输入,而不是我需要的多个输入。我不确定它是否在我的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()

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

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

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