【问题标题】:Python 3 OOP - How to get names by first letter from an attribute list (Object Instance)Python 3 OOP - 如何通过属性列表中的第一个字母获取名称(对象实例)
【发布时间】:2019-05-16 16:10:27
【问题描述】:

伙计们!我有一个具有 3 个属性('name'、'id'、'gpa')的类('Student')。然后我有一个该类对象的列表(“学生”)。我需要根据属性列表“名称”的第一个字母(“键”)将“学生”的所有实例保存到另一个列表中。因此,对于以“key”开头的每个“name”,新列表应该包含“students.name”、“students.id”、“students.gpa”。

我试过studentsNames = filter(lambda x: x.startswith(key), students) 但列表('studentsNames')出现空,即使有以'key'开头的名字。

这是代码示例。全班学生在这里:https://github.com/lelecarabina/python3/blob/master/Student.py,下面的完整代码在这里:https://github.com/lelecarabina/python3/blob/master/StudentFinder.py

...

#Create new Student object students
students = [Student((),(),())] * numStudents

print("All Students:")

# Initialize List of Student 'students' with **CONSTRUCTOR** and Print 
for x in range(numStudents): 
    students[x] = (Student(names[x], (1101 + x), (gpas[rand]))) # constructor
    print(students[x].getName(), students[x].getId(), students[x].getGpa())

#prompt user for input
key = input("\nEnter the first letter of student's name: ")

for x in range(len(students)):
    studentsNames = [item for item in students if students[x].name[0] == key]   
    #print(studentsNames)

#print sorted list header
print("Students names starting with '{}'".format(key.upper()))    

#loop through sorted list
for x in range(numStudents): 
    #end loop if no student's names matches user's input
    if studentsNames == "": 
        print("NOT FOUND")
        break
    # end if statement

    #print sorted list is student's name matches user's input, along with name's id and gpa
    for name in studentsNames:  
        if name == students[x].name:
            print("     Name: {} -> ID: {} -> GPA: {}".format(students[x].name, students[x].id, students[x].gpa))

        # end if statement            
    # end for each loop            
# end for loop

#message to user, ending program
print("Program Ended.")

它应该打印: 名称:... -> ID:... -> GPA: ... 其中点是从“学生”中提取的信息。 但它打印: “以‘L’开头的学生名字 程序已结束。”

请帮忙。

【问题讨论】:

    标签: list oop search python-3.7


    【解决方案1】:

    我。想通了。它。出去。 我需要students[x].name[0] == key.upper() 而不仅仅是students[x].name[0] == key,因为列表中的所有名称都以大写字母开头...... :(

    最终代码sn-p: `#提示用户输入 key = input("\n请输入学生姓名的首字母:")

    #look for key in students.name list...
    for x in range(len(students)):
        #if key found...
        if students[x].name[0] == key.upper(): 
            #add student record to studentsNames list...
            studentsNames.append(students[x].name)               
    
    #loop through sorted list
    print("Students names starting with '{}'".format(key.upper()))
    for x in range(numStudents): 
        #end loop if no student's names matches key
        if studentsNames == "": 
            print("NOT FOUND")
            break
        # end if statement
    
        #print student records that matched key
        for name in studentsNames:  
            if name == students[x].name:
                print("     Name: {} -> ID: {} -> GPA: {}".format(students[x].name, students[x].id, students[x].gpa))    
            # end if statement            
        # end for each loop            
    # end for loop`
    

    【讨论】:

      猜你喜欢
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-23
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多