因此,我有一个本来很简单的作业,希望我输入学科的成绩等。输入量随用户要输入的学科数而变化。输入工作正常,但是当我打印出保存的值时,只会保存最近输入的值。这是我的输入代码:
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
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)
我的代码有什么问题?我是通过错误的方式进行迭代,还是没有正确分配/保存某些内容?
答案 0 :(得分:1)
您已经进入了非常常见的“陷阱”。
问题在于如何初始化subject
类。
这里您只是将一个类添加到列表中:
classList.append(subject)
这里的情况如下:
不带花括号调用subject
后,您将拥有一个新对象。
但是,当您第二次调用它时-python不会为您初始化新对象,而只是返回在第一步中创建的对象。
因此,您需要做的是正确初始化所有subject
对象。
两种方式:
1)从subject
定义中删除参数,并将默认值设置为none +在classList.append(subject)
中添加括号
2)将for循环中的所有值收集到变量中,并在函数末尾使用适当的args初始化subject
类。