0
votes

I am new to python and I get stuck in this error. I want to print names and years of birth of animals in team in an order by the name. Now I am keeping getting printing years and names but without order. I wanted to use lambda but than error occures. Could you help me please?

class Animal:
    def __init__(self, name):
        self.name = name

class Team:
    def __init__(self, name):
        self.name = name
        self.year_of_birth = year_of_birth
        self.members = []        

    def add_member(self, member):
        self.member = member
        self.members.append(team.member)

def print_team(team):
    list_members= []
    for member in team.members:
        list_members.append(member.name)
        list_members.append(member.year_of_birth)
        print('{} ({})'.format(member.name ,member.year_of_birth) )

    print (list_members)

    for memeber in list_members:
        sorted(list_members, key = lambda member: member.name)

    print (list_members)

team = Team('Wolves')
team.add_member(Animal('Josh', 2015))
team.add_member(Animal('Quinn', 2016))
team.add_member(Animal('Peter', 2010))
print_team(team)

line , in sorted(memberlist, key = lambda member: member.name) AttributeError: 'str' object has no attribute 'name'

1
Would be good to fix your code first - I think some names are in the wrong positionserocoar
What attribute? Post full error!Elis Byberi
list_members is an alternating list of values (you append two attributes on each loop), not class objects.roganjosh
I absolutely forgot. I am sorry. Here is edited versionLivD
check spelling e.g. memeberQHarr

1 Answers

1
votes

Here is another possible solution:

In order to print an object of any class that you created, you must implement the __str__() method or the __repr__() method as an official string representation of your objects. So, here is the modified Animal class:

class Animal:
    def __init__(self, name, year_of_birth):
        self.name = name
        self.year_of_birth = year_of_birth # Added this field because your created Animal objects had it in the example.

    def __str__(self):
        return self.name + " " + str(self.year_of_birth)

    def __repr__(self):
        return self.name + " " + str(self.year_of_birth)

Next thing, I simplified your add_member() method because there was no reason for self.member = member:

def add_member(self, member):
        self.members.append(member)

Next, I modified your print_team() function like this:

def print_team(team):
    list_members= []
    for member in team.members:
        list_members.append(member)

    print("Unsorted: ")
    print (list_members)

    list_members.sort(key = lambda animal: animal.name)

    print("Sorted by name: ")
    print (list_members)

You can simply append any object of type Animal in the list_members list. After that, you can sort your list using sort() and then print it. The code below:

team = Team('Wolves',2015)
team.add_member(Animal('Josh',2015))
team.add_member(Animal('Quinn',2145))
team.add_member(Animal('Peter',3000))
print_team(team)  

Produces the following result:

Unsorted: 
[Josh 2015, Quinn 2145, Peter 3000]
Sorted by name: 
[Josh 2015, Peter 3000, Quinn 2145]