【问题标题】:python 3.6 appending list created duplicates [closed]python 3.6附加列表创建了重复项[关闭]
【发布时间】:2018-01-17 21:50:15
【问题描述】:

我的程序将计算最终成绩,我相信这一切都是正确的,直到我创建多个条目。当我输入“y”以输入另一个学生时,第二个学生复制到第一个学生列表中,然后复制自身,导致副本而不是我的第一个原始条目。所以不要让 mike、jim 和 mary 变成 mary、mary 和 mary。

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

【问题讨论】:

  • 在您的打印循环中,您正在打印最后打印的值,而不是列表的值...
  • for student in range(len(studentList)): 使这进一步复杂化,因为student 然后成为一个整数,用于索引您的列表,这不是很直观。我将更改为for student in studentList:,而您的print 的第一部分将是print("\nStudent Name:", student[0] ,"\nStudent-ID:", student[1] ,...")

标签: python python-3.6


【解决方案1】:

您在while 循环中定义namenet_idfnl_gradelet_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()

【讨论】:

    【解决方案2】:

    问题不在您的列表中,而在您的 for 循环中。

    您需要使用正在循环的学生,而不是使用 namenet_idfnl_gradelet_grade 变量。另外,由于studentList 是一个列表,你可以简单地循环它

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

    【讨论】:

      猜你喜欢
      • 2020-07-07
      • 2018-03-05
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多