如何修复输出重复相同的错误
How can I fix a bug that output is repeated the same
我正在尝试创建学生成绩单。首先,我必须同时创建学生和课程列表。但是,我被困在这个问题上。这是我的代码:
from datetime import datetime
class StudentMark():
class Student():
def studentCount(student):
student.count = int (input ("Enter number of students: "))
return student.count
def studentDetail(student):
student.sID = input ("Student id: ")
student.sName = input ("Student name: ")
student.sDOB = input("Student's DOB:")
student.setDOB=datetime.strptime(student.sDOB, "%d/%m/%Y")
return student.sID, student.sName, student.setDOB
def studentList(student):
sList = []
for i in range(student.count):
sList.append ((student.sID, student.sName, student.setDOB))
sList.sort()
for s in sList:
print (f"Student id: {s[0]} Name: {s[1]} Date of birth: {s[2]}")
class Course():
def courseCount(course):
course.count = int (input ("Enter number of courses: "))
return course.count
def courseDetail(course):
course.cID = input ("Course id: ")
course.cName = input ("Course name: ")
return course.cID, course.cName
def courseList(course):
cList = []
for i in range(course.count):
cList.append ((course.cID, course.cName))
cList.sort()
for c in cList:
print (f"Course id: {c[0]} Name: {c[1]}")
std = Student()
std.studentCount()
std.studentDetail()
std.studentList()
crs = Course()
crs.courseCount()
crs.courseDetail()
crs.courseList()
当我想输入2个和2个以上的数据时。例如:
Enter number of students: 2
Student id: 111
Student name: max
Student's DOB:11/11/1111
Student id: 111 Name: max Date of birth: 1111-11-11 00:00:00
Student id: 111 Name: max Date of birth: 1111-11-11 00:00:00
Enter number of courses: 2
Course id: 1
Course name: math
Course id: 1 Name: math
Course id: 1 Name: math
如您所见,输出是重复的,我不知道如何解决这个问题。希望大家帮我解决一下。
方法 studentList()
中的第一个 for 循环循环了两次,因为范围 (student.count) 的计算结果为 2。请注意 student.count 在第一个 input('Enter number of students:')
,即 2.
除了两次循环之外,在循环内添加到列表中的值不会改变,因为它们引用对象学生的同一实例的属性:
def studentList(student):
sList = []
for i in range(student.count):
sList.append ((student.sID, student.sName, student.setDOB))
sList.sort()
for s in sList:
print (f"Student id: {s[0]} Name: {s[1]} Date of birth: {s[2]}")
要达到收集多个Student并全部打印的效果,必须在收集完每个Student的数据后,立即将每个Student存储在一个数组中。像这样:
from datetime import datetime
import copy
class StudentMark():
class Student():
students = []
def studentCount(student):
student.count = int (input ("Enter number of students: "))
return student.count
def studentDetail(student):
for s in range(student.count):
print(f"### Student {s+1} entry ###")
student.sID = input ("Student id: ")
student.sName = input ("Student name: ")
student.sDOB = input("Student's DOB: ")
student.setDOB=datetime.strptime(student.sDOB, "%d/%m/%Y")
student.students.append(copy.copy(student))
def studentList(student):
for s in student.students:
print (f"Student id: {s.sID} Name: {s.sName} Date of birth: {s.sDOB}")
我已尽力修复代码。有更好的方法可以达到这个结果。
我正在尝试创建学生成绩单。首先,我必须同时创建学生和课程列表。但是,我被困在这个问题上。这是我的代码:
from datetime import datetime
class StudentMark():
class Student():
def studentCount(student):
student.count = int (input ("Enter number of students: "))
return student.count
def studentDetail(student):
student.sID = input ("Student id: ")
student.sName = input ("Student name: ")
student.sDOB = input("Student's DOB:")
student.setDOB=datetime.strptime(student.sDOB, "%d/%m/%Y")
return student.sID, student.sName, student.setDOB
def studentList(student):
sList = []
for i in range(student.count):
sList.append ((student.sID, student.sName, student.setDOB))
sList.sort()
for s in sList:
print (f"Student id: {s[0]} Name: {s[1]} Date of birth: {s[2]}")
class Course():
def courseCount(course):
course.count = int (input ("Enter number of courses: "))
return course.count
def courseDetail(course):
course.cID = input ("Course id: ")
course.cName = input ("Course name: ")
return course.cID, course.cName
def courseList(course):
cList = []
for i in range(course.count):
cList.append ((course.cID, course.cName))
cList.sort()
for c in cList:
print (f"Course id: {c[0]} Name: {c[1]}")
std = Student()
std.studentCount()
std.studentDetail()
std.studentList()
crs = Course()
crs.courseCount()
crs.courseDetail()
crs.courseList()
当我想输入2个和2个以上的数据时。例如:
Enter number of students: 2
Student id: 111
Student name: max
Student's DOB:11/11/1111
Student id: 111 Name: max Date of birth: 1111-11-11 00:00:00
Student id: 111 Name: max Date of birth: 1111-11-11 00:00:00
Enter number of courses: 2
Course id: 1
Course name: math
Course id: 1 Name: math
Course id: 1 Name: math
如您所见,输出是重复的,我不知道如何解决这个问题。希望大家帮我解决一下。
方法 studentList()
中的第一个 for 循环循环了两次,因为范围 (student.count) 的计算结果为 2。请注意 student.count 在第一个 input('Enter number of students:')
,即 2.
除了两次循环之外,在循环内添加到列表中的值不会改变,因为它们引用对象学生的同一实例的属性:
def studentList(student):
sList = []
for i in range(student.count):
sList.append ((student.sID, student.sName, student.setDOB))
sList.sort()
for s in sList:
print (f"Student id: {s[0]} Name: {s[1]} Date of birth: {s[2]}")
要达到收集多个Student并全部打印的效果,必须在收集完每个Student的数据后,立即将每个Student存储在一个数组中。像这样:
from datetime import datetime
import copy
class StudentMark():
class Student():
students = []
def studentCount(student):
student.count = int (input ("Enter number of students: "))
return student.count
def studentDetail(student):
for s in range(student.count):
print(f"### Student {s+1} entry ###")
student.sID = input ("Student id: ")
student.sName = input ("Student name: ")
student.sDOB = input("Student's DOB: ")
student.setDOB=datetime.strptime(student.sDOB, "%d/%m/%Y")
student.students.append(copy.copy(student))
def studentList(student):
for s in student.students:
print (f"Student id: {s.sID} Name: {s.sName} Date of birth: {s.sDOB}")
我已尽力修复代码。有更好的方法可以达到这个结果。