Python 在While循环中使用时将原始输入保存到列表

Python 在While循环中使用时将原始输入保存到列表,python,Python,我今天已经发布了一个问题,上面有两个问题。其中一个问题解决得很好,然后变得有点复杂。因此,请原谅,我单独发布了另一个问题,因为它混淆了一些问题: 我是python新手,所以请提前道歉。非常感谢您的帮助。我已经被困在这个代码上2周了,我有一个隧道的愿景,无法解决它: 基本上,我们的任务是掌握面向对象编程。不幸的是,我们不得不使用“get”和“set”,这是我学到的很多人都不喜欢的,然而,根据我们的导师,我们必须这样做。我们被告知tp创建一个程序,让用户看到一个有3个选项的屏幕。1.添加一个学生。2

我今天已经发布了一个问题,上面有两个问题。其中一个问题解决得很好,然后变得有点复杂。因此,请原谅,我单独发布了另一个问题,因为它混淆了一些问题:

我是python新手,所以请提前道歉。非常感谢您的帮助。我已经被困在这个代码上2周了,我有一个隧道的愿景,无法解决它:

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

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()

您的问题是模块是一个不断更改的单一变量。相反,把它列成一个清单

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”,是一个列表

然后,
modules
将是一个元组列表,元组是
(moduleName,grade)
,要显示它们,请将
视图学生
中的行更改为:

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


看来你需要这样的东西:

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中,任何空值都被计算为假。

告诉你的导师,他/她是一个需要学习python不是Java的白痴。哈哈哈!所以很多人都这么说!显然,我的导师是一个非常聪明的人,但这是他教我们的方式!:)显然不是你的错,但这是一个真正的问题——Python的很大一部分是可读性和可维护性,这种将Python当作另一种语言来使用的做法严重损害了这一点。看到新程序员被那些本打算教他们最佳实践的人引入歧途,我感到很痛苦。是的,这就是我们在开始课程时被告知的,我很喜欢它,并对它充满信心,直到所有这些新东西被引入,现在我只是太困了,不知道如何解决我遇到的问题!我尝试过逻辑思维,现在只是在敲打按钮,希望得到最好的哈哈!您应该尝试自己从python文档学习python。你可能会学到比你在这门课上学到的更多。谢谢我改变了它,我只是不断收到这个错误消息!我开始认为这可能是不可能的:s---viewStudent()文件“/Users/Rusowicz/Desktop/Uni/Python/Python classes.py”,第122行,在viewStudent for module中,亲自评分。getModuleName():ValueError:需要超过1个值才能解包------当我尝试将其用于module时,亲自评分。getModules():---错误显示getmodules不存在。当然,您需要添加它。由于您没有为
Student
提供代码,因此我无法在这方面帮助您。但是您需要删除
学生
的单独
模块
成绩
属性,而是给他一个
模块
属性,这是一个列表。在你循环它们之后,你可以做
student.setModules(modules)
,然后你就有了你的
person.getModules()
我想这就是我搞砸的地方,我被告知要加上student=student(),事实上,我不太清楚它为什么会在那里。我所知道的是,当我拿走它时,它会给我错误消息msg:student.setFirstName(firstName)#设置这个学生的名字错误:全局名称'student'当然没有定义,如果没有变量
student
你想如何修改它?在我看来,如果您希望在没有基本了解变量或类的情况下开发此类应用程序,那么您根本没有正确地学习python。如果您不能理解自己的代码,我们如何帮助您?我建议你回到StackOverflow,一旦你能感激我们正在帮助你的答案。道歉!我现在可以打印所有的成绩,只是模块我无法打印。我有一个基本的理解,我正在努力学习。似乎有很多不同的方法,我很欣赏这些答案,只是我现在看到了很多不同的东西,没有人可以帮助我,因为我离开大学两周了,我把自己搞糊涂了。谢谢你
for module, grade in person.getModules():
       print "Module: " + module
       print "Grades: " + grade
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