簡體   English   中英

Python,每個用戶輸入的新唯一 object

[英]Python, new unique object for each user input

初級程序員在這里。 我創建了一個 class 使學生成為 object,我需要一種方法來為用戶創建的每個 object 不覆蓋以前的對象並使它們完全相同。 這可能是一個糟糕的解釋,所以我將只發布代碼和 output。

class Student:
    """This class holds student records """
    student_id = 000
    def __init__(self,firstname='blank',lastname='blank',age=0,sex='NA',major='undeclared',graduation=0):
        self.firstname = firstname
        self.lastname = lastname
        self.age = age
        self.sex = sex
        self.major = major
        self.graduation= graduation
        Student.student_id +=1
        self.student_id = Student.student_id


students=[]
while True:
    new_student=Student(input('Enter student first name: '),input('Enter student last name: '),input('Enter student age: '),input("Enter student sex: "),input("Enter student's major: "),input("Enter student's expected graduation date: "))
    students.append(new_student)
    add_another=input("Would you like to add another student? Enter 'Y' for yes or any other key to quit and print your entries: ")
    if add_another == 'Y':
        continue
    else:
        for i in students:
            print(new_student.firstname)
            print(new_student.student_id)
        break

我的 output 目前看起來像這樣:

Enter student first name: Thomas
Enter student last name: Hutton
Enter student age: poop
Enter student sex: p
Enter student's major: p
Enter student's expected graduation date: p
Would you like to add another student? Enter 'Y' for yes or any other key to quit and print your entries: Y
Enter student first name: Timmy
Enter student last name: p
Enter student age: p
Enter student sex: p
Enter student's major: p
Enter student's expected graduation date: p
Would you like to add another student? Enter 'Y' for yes or any other key to quit and print your entries: n
Timmy
2
Timmy
2

如您所見,現在填充學生列表的唯一 object 現在對於兩個條目都是相同的 object,我需要它們是用戶提供的條目。 謝謝你的幫助。

您正在創建的 object 並沒有覆蓋之前的,問題出在您的打印循環上:

for i in students:
    print(new_student.firstname)
    print(new_student.student_id)
break

它不會打印列表中的所有學生,它總是打印最后添加的學生(這是new_student變量)。 要解決這個問題,你可以這樣做:

for student in students:
    print(student.firstname)
    print(student.student_id)
break

當您遍歷學生時,您沒有引用正確的變量。 new_student應該是i

for i in students:
    print(i.student_id)
    print(i.firstname)

但我建議將 i 變量更改為學生,所以它看起來像

for student in students:
    print(student.firstname)

i通常用於表示列表中的 integer 索引。

您不需要臨時的new_student

只需將 append 直接添加到學生列表中,而不使用(不是這樣)臨時變量。 與提示另一個相同。

class Spam:
    """Spiced meat"""
    def __init__(self, firstname=''):
        self.firstname = firstname

    def __repr__(self):
        return self.firstname
  
lunch = []
while True:
    lunch.append(Spam(input('Enter name: ')))
    if input('Another one? ') in ('y', 'Y'):
        continue
    else:
        break

for meat in lunch:
    print(meat)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM