代码之家  ›  专栏  ›  技术社区  ›  Nameless King

仅保存python程序中最后一个对象的对象列表

  •  0
  • Nameless King  · 技术社区  · 7 年前

    所以我有一个简单的家庭作业作业,希望我输入我的科目成绩,等等。输入量随用户想要输入的科目数量而变化。输入工作正常,但当我打印出保存的值时,只有最近输入的值才会被保存。这是我的输入代码:

    def gpa_input(classList):
        print("please enter how many classes you have")
        while True:
            try:
                numOfClasses = int(input())
            except ValueError:
                print("please enter a valid number")
                continue
            else:
                break
        for i in range (numOfClasses):
            classList.append(subject)
            print("enter name of " + str(i+1) + "th subject:")
            classList[i].name = input()
            print("enter num of credits for " + str(i+1) + "th subject:")
            while True:
                try:
                    classList[i].credits = int(input())
                except ValueError:
                    print("please enter a valid number")
                    continue
                else:
                    break
            print("enter grade for " + str(i+1) + "th subject:")
            while True:
                try:
                    classList[i].gradePercentage = int(input())
                except ValueError:
                    print("please enter a valid number")
                    continue
                else:
                    break
    

    A subject 是一个包含字符串值和2个int值的类,定义如下:

    class subject:
        def __init__(name, credits, gradePercentage):
            self.name = name
            self.credits = credits
            self.gradePercentage = gradePercentage
    

    下面是打印所有这些信息的代码:

    def main():
      gpa_input(classList)
      for i in range (len(classList)):
          print(classList[i].name)
          print(classList[i].credits)
          print(classList[i].gradePercentage)
    

    我的代码有什么问题?我是以错误的方式迭代某些内容,还是有一些内容没有得到正确的分配/保存?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Laser    7 年前

    你已经进入了一个非常常见的“陷阱”。 问题在于如何初始化 subject 班级。

    在这里,您只需在列表中附加一个类: classList.append(subject)

    情况如下:
    一旦你打电话 主题 如果没有大括号,您将有一个新对象。
    但当您第二次调用它时,python不会为您初始化新对象,只返回第一步创建的对象。
    所以你所需要的就是正确初始化 主题 物体。

    两种方式:
    1)从中删除args 主题 定义和使默认值为无+向 classlist.append(主题)
    2)将for循环中的所有值收集到变量中,并在函数结束时初始化您 主题 用适当的参数初始化。

    推荐文章