python 3.6追加列表创建的重复项

python 3.6追加列表创建的重复项,python,python-3.6,Python,Python 3.6,我的程序将计算最终分数,我相信在我创建多个条目之前都是正确的。当我输入“y”以输入另一个学生时,第二个学生复制到第一个学生列表中,然后将其自身复制,生成一个副本,而不是我的第一个原始条目。因此,没有迈克、吉姆和玛丽,而是玛丽、玛丽和玛丽 #This program will calculate a classes final grades. def get_grades(): print("\nEnter grades for assignments 1-5 (0-20 PT sca

我的程序将计算最终分数,我相信在我创建多个条目之前都是正确的。当我输入“y”以输入另一个学生时,第二个学生复制到第一个学生列表中,然后将其自身复制,生成一个副本,而不是我的第一个原始条目。因此,没有迈克、吉姆和玛丽,而是玛丽、玛丽和玛丽

#This program will calculate a classes final grades.

def get_grades():

    print("\nEnter grades for assignments 1-5 (0-20 PT scale)")

    assignment1 = eval(input("\nEnter assignment 1 grade: "))
    assignment2 = eval(input("Enter     ''     2 grade: "))
    assignment3 = eval(input("Enter     ''     3 grade: "))
    assignment4 = eval(input("Enter     ''     4 grade: "))
    assignment5 = eval(input("Enter     ''     5 grade: "))

    total = (assignment1 + assignment2 + assignment3 + assignment4 + assignment5)

    print("\nEnter the Midterm and Final exam grades (0-100 PT scale))")
    midterm = eval(input("\nMidterm grade: "))
    final = eval(input("Final grade: "))

    exam_avg = (final + midterm)/2

    print("\nEnter the participation grade (0-10 PT scale)")
    participation = int(input("Participation: "))

    final_grade = (total*0.45) + (exam_avg*0.45) + participation

    return final_grade

def determine_let_grade(final_grade):

    if final_grade > 100 or final_grade < 0:
        return "ERROR!"

    elif final_grade <= 100 and final_grade > 90:
        return "A"

    elif final_grade <= 89 and final_grade > 80:
        return "B"

    elif final_grade <= 79 and final_grade > 70:
        return "C"

    elif final_grade <= 69 and final_grade > 60:
        return "D"

    elif final_grade <= 59:
        return "F"   

def main():

    print("This program will calculate your students final grades.")

    studentList = []
    another_student = "y" 

    while another_student == 'y':
        name = input("\nEnter the student's name: ")
        net_id = int(input("Enter the student's Identification number: ")) 
        fnl_grade = get_grades()
        let_grade = determine_let_grade(fnl_grade)
        studentList.append([name, net_id, fnl_grade, let_grade])
        another_student = input("\nEnter y or n to add another student: ")

    for student in range(len(studentList)):
        print("\nStudent Name:", name.title() ,"\nStudent-ID:", net_id ,"\nFinal Grade:",fnl_grade ,"\nLetter Grade:", let_grade)
        print()
    input ("Please press Enter to quit the program")
main()
#此程序将计算一个班级的最终成绩。
def get_等级():
打印(“\n输入作业1-5(0-20分等级)”的分数)
赋值1=eval(输入(“\n输入赋值1等级:”)
assignment2=eval(输入(“输入”“2年级:”)
assignment3=eval(输入(“输入”“3年级:”)
assignment4=eval(输入(“输入”“4年级:”)
assignment5=eval(输入(“输入”“5年级:”)
总计=(分配1+分配2+分配3+分配4+分配5)
打印(“\n输入期中考试和期末考试成绩(0-100分))”)
期中=评估(输入(“\n期中成绩:”)
最终=评估(输入(“最终成绩:”)
考试平均分数=(期末+期中)/2
打印(“\n输入参与等级(0-10分等级)”)
参与=整数(输入(“参与:”)
期末成绩=(总成绩*0.45)+(考试平均成绩*0.45)+参与度
返回最终成绩
def确定等级(最终等级):
如果最终等级>100或最终等级<0:
返回“错误!”
elif期末考试90级:
返回“A”
elif期末考试80级:
返回“B”
elif期末考试70级:
返回“C”
elif期末考试60级:
返回“D”

elif final_grade问题不在您的列表中,而是在您的循环中

您需要使用正在循环的学生,而不是使用
名称
网络id
fnl\u等级
let\u等级
变量。另外,由于
studentList
是一个列表,因此您可以简单地在其上循环

for student in studentList:
    print("\nStudent Name:", student[0] ,"\nStudent-ID:", student[1] ,"\nFinal Grade:",student[2] ,"\nLetter Grade:", student[3])

while
循环中定义
name
net\u id
fnl\u grade
let\u grade
。退出循环时,这些变量保留上次迭代的值。您只需在下面的for循环中打印这些变量,而不进行设置。您可能希望使用以下条件:

  for name, net_id, fnl_grade, let_grade in studentList:
      print("\nStudent Name:", name.title() ,"\nStudent-ID:", net_id ,"\nFinal Grade:",fnl_grade ,"\nLetter Grade:", let_grade)
      print()

在打印循环中,您打印的是最后打印的值,而不是列表中的值…
对于范围内的学生(len(studentList)):
使这一点更加复杂,因为
student
会变成一个整数,用来索引列表,这不是很直观。对于学生列表中的学生,我将更改为
,您的
打印的第一部分将是
打印(“\n学生姓名:”,学生[0],“\n学生ID:”,学生[1],“”)