J'ai fait un système de bibliothèque simple qui stocke des livres avec un identifiant, un nom et un coût. Ma question est plutôt simple mais ma connaissance limitée de Python m'a laissé tomber.
J'ai créé une classe qui stocke des livres dans la bibliothèque, ils sont créés comme ceci; p> Je dois faire une fonction qui recherche un livre par son ID, en faisant une fonction dans ma classe de bibliothèque. J'ai essayé de le faire comme dans le code ci-dessous, mais cela n'a pas fonctionné. Fondamentalement, je veux donner à ma fonction une carte d'identité et il devrait renvoyer le nom et le coût de ce livre particulier, mais uniquement si l'ID est présent dans la liste. p>
3 Réponses :
Je pense que l'idée la plus simple si vous avez besoin Vous pouvez même renommer Je pense que vous devriez publier votre code sur codereview strong> , comme vous pouvez utiliser des conseils plus larges sur votre code. p> p> ID code> indexation consiste à utiliser un Dictionnaire : get_book code> à __ getItem __ code> , ce deuxième nom est spécial à Python, il s'appelle une méthode de Dunder. (ou méthode magique). La mise en œuvre vous permettra d'écrire lib [id] code> au lieu de lib.show_id (id) code> (Je ne dis pas que vous devriez, mais c'est une option). Il existe de nombreuses autres méthodes de Dunder que vous pouvez essayer d'utiliser pour vous amuser, vous pouvez en trouver certains dans le Modèle de données Python . P>
Dang tu m'as battu! Si je me souviens bien, vous l'avez eu comme une liste à l'origine, alors j'ai commencé à écrire cela, alors vous avez édité haha bien cependant!
Nice One, Nitpick que OP souhaitait retourner retourner le nom et le coût de ce livre particulier code>, pas l'objet complet du livre, par exemple en retournant ou en tuple.
Maintenant que j'y pense, je pense (donner le nom de la méthode) que l'objectif était d'appeler .show () code> sur un livre donné à l'aide de son ID code>, let moi savoir si ce n'est pas le cas.
Même si cette méthode n'est pas vraiment optimisée, vous pouvez les parcourir avec une boucle pour la boucle.
for book in lib.books:
if book.id == searched_id:
searched_book = book
break
Comme indiqué ci-dessus, il pourrait y avoir de meilleures implémentations, mais en utilisant votre code actuel, vous pouvez faire ci-dessous où j'ai adapté votre fonction J'espère que cela aide! P> show_id code> en fonction des exigences. Il repose sur un compréhension de la liste pour identifier les identifiants corrects. class Book:
def __init__(self, ID, name, price):
self.ID = ID
self.name = name
self.price = price
def show(self):
print(self.ID, self.name, self.price)
def get_attribute_string(self):
print(str(self.ID) + '_' + str(self.name) + '_' + str(self.price))
def get_id(self):
print(self.ID)
def get_name(self):
print(self.name)
def get_price(self):
print(self.price)
class Library:
def __init__(self):
self.books = []
def add_book(self, Book):
self.books.append(Book)
def remove_book(self, Book):
self.books.remove(Book)
def show_id(self, ID):
# simple list comprehension to filter; note that you might need to make sure that e.g. all IDs are int, or str
matching_ids = [book for book in self.books if book.ID == ID]
# return name, price tuple for all matching books as requested -- note that this will return a list of all matches
# if the IDs are truly unique, you can return e.g. a single tuple or Book object here
# if nothing found, will return empty list
return [(book.name, book.price) for book in matching_ids]
def show_all(self):
for Book in self.books:
Book.show()
if __name__ == '__main__':
lib = Library()
book1 = Book(1, 'Bookname1', "$30")
book2 = Book(2, 'Bookname2', "$10")
book3 = Book(3, 'Bookname3', "$40")
#1.show_id
lib.add_book(book1)
lib.add_book(book2)
lib.add_book(book3)
lib.remove_book(book2)
lib.show_all()
print(lib.show_id(1))