苦苦掙扎:
撰寫一個名為 get_pets_string 的函式。get_pets_string 應該有一個引數,一個 Owner 的實體。get_pets_string 應該根據以下格式回傳該所有者的寵物串列:
David Joyner's pets are: Boggle Joyner, Artemis Joyner
class Name:
def __init__(self, first, last):
self.first = first
self.last = last
class Pet:
def __init__(self, name, owner):
self.name = name
self.owner = owner
class Owner:
def __init__(self, name):
self.name = name
self.pets = []
如果您的功能正常作業,這將最初列印:
David Joyner's pets are: Boggle Joyner, Artemis Joyner Audrey Hepburn's pets are: Pippin Hepburn
owner_1 = Owner(Name("David", "Joyner"))
owner_2 = Owner(Name("Audrey", "Hepburn"))
pet_1 = Pet(Name("Boggle", "Joyner"), owner_1)
pet_2 = Pet(Name("Artemis", "Joyner"), owner_1)
pet_3 = Pet(Name("Pippin", "Hepburn"), owner_2)
owner_1.pets.append(pet_1)
owner_1.pets.append(pet_2)
owner_2.pets.append(pet_3)
print(get_pets_string(owner_1))
print(get_pets_string(owner_2))
這是我的代碼如下:
def get_pets_string(owner):
for obj in owner.pets:
return owner.name.first " " owner.name.last "'s pets are: " obj.name.first " " obj.name.last
我的回答只能為每個主人列印一只寵物,如下所示:
David Joyner's pets are: Boggle Joyner
Audrey Hepburn's pets are: Pippin Hepburn
uj5u.com熱心網友回復:
您可以實作一個快速幫助函式來更改字串的顯示方式并簡單地顯示名稱:
def repr_name(name):
return name.first " " name.last
然后你可以將所有寵物一起顯示:
def get_pets_string(owner):
return f"{repr_name(owner.name)}'s pets are: {', '.join([repr_name(pet.name) for pet in owner.pets])}"
將', '.join([str(pet.name) for pet in owner.pets])每只寵物的名字放入串列中,然后用逗號分隔它們。
uj5u.com熱心網友回復:
您可以str.join在生成格式化字串的生成器運算式上使用。
', '.join(f"{pet.name.first} {pet.name.first}" for pet in owner_1.pets)
這產生:
'Boggle Boggle, Artemis Artemis'
由于這是家庭作業,我不想給你完整的解決方案,所以我會留給你把這塊和其他部分放在一起。
uj5u.com熱心網友回復:
問題是您在第一次迭代中立即回傳
def get_pets_string(owner):
for obj in owner.pets:
return owner.name.first " " owner.name.last "'s pets are: " obj.name.first " " obj.name.last
#^ here is the problem, you need to iterate over your whole list but this stop after the first iteration
您需要累積構建結果,就像這樣
def get_pets_string(owner):
owner_name = owner.name.first " " owner.name.last "'s pets are: "
pets = []
for obj in owner.pets:
pets.append(obj.name.first " " obj.name.last) #gather all the pets names in a list
return owner_name ", ".join(pets) #use join to put together all the pets name we build previously
uj5u.com熱心網友回復:
問題是您的函式正在回傳值。Return 意味著函式的結束,因此它不會遍歷其他寵物。
該功能應如下所示...
def get_pets_string(owner):
owner_string = f"{owner.name.first} {owner.name.last}'s pets are: "
pets_string = ""
for obj in owner.pets:
pet_name = f"{obj.name.first} {obj.name.last}"
pets_string = pet_name " "
return owner_string pets_string
您實際上可以通過在每個類上回傳全名作為方法來重構您的代碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/488744.html
