Python Forum
Is my code OOP and what could i do better?
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Is my code OOP and what could i do better?
#1
class Library:
    def __init__(self, listOfBooks=None):
        self.books = listOfBooks 
        self.books1 = []

    def displayAvailableBooks(self):
        print("Bücherliste: ")
        for book in self.books: 
            print(" -" + book)
    
    def borrowBook(self, bookName):
        if bookName in self.books:
            print("Du hast das Buch "+bookName+" ausgeliehen ")
            self.books.remove(bookName)
            self.books1.append(bookName)
        
            return True
        else:
            print("Sorry, das Buch wurde bereits ausgeliehen")
            print("Verfügbare Bücher: ")
            for book in self.books: 
                print(" -" + book)
    
            return False

    def returnBook(self, bookName):
        self.books.append(bookName)
        print("Buch zurückgebracht!")
    
    
class Kunden: 
    def __init__(self):
        self.kunden = []

    def requestBook(self):
        self.book = input("Name des Buches zum ausleihen: ")
        return self.book

    def returnBook(self):
        self.book = input("Name des Buches zum zurückgeben: ")
        return self.book

    def displayAvailableKunden(self):
        print("Kundenliste: ") 
        for kunden in self.kunden:
            print(" -" + kunden)
    
    def addKunden(self):
        name = input("Geben Sie den Namen des Kunden ein: ")
        self.kunden.append(name)
    
    def delKunden(self):
        name = input("Geben Sie den Namen des Kunden zum entfernen an: ")
        self.kunden.remove(name)

class Bücher(Library):
    def __init__(self):
        self.borrowBooks = []

    def displayUnavailableBooks(self):
        print("Liste mit ausgeliehenen Bücher: ")
        for books1 in self.books1: 
            print(" -" + books1 )





if __name__ == "__main__":
    centraLibrary = Library(["Die kleine Raupe Nimmersatt", "Harry Potter", "Der Regenbogenfisch", "Elmar"])
        
    Kunden = Kunden()
    Bücher=Bücher()
    


    while(True):
        willkomensNachricht = '''\n        Bibliothek-APP       
        Wähle eine Option:
        Alle Bücher anzeigen (1)
        Buch ausleihen       (2)
        Buch zurückbringen   (3)
        Verlassen            (4)
        Kundenliste anzeigen (5)
        Kunden hinzufügen    (6)
        Kunden entfernen     (7)
        Ausgeliehene Bücher  (8)
        anzeigen 
        '''
        print(willkomensNachricht)
        a = int(input("Auswahl eingeben: "))
        if a == 1:
            centraLibrary.displayAvailableBooks()
        elif a == 2:
            centraLibrary.borrowBook(Kunden.requestBook())
        elif a == 3:
            centraLibrary.returnBook(Kunden.returnBook())
        elif a == 4:
            print("Aufwiedersehen!")
            exit()
        elif a == 5:
            Kunden.displayAvailableKunden()
        elif a == 6:
                Kunden.addKunden()
        elif a == 7:
                Kunden.delKunden()
        elif a == 8:
            Bücher.displayUnavailableBooks()
            
             

        else:
            print("Error!")


        
Reply
#2
If you select number 8 you get this error:
Error:
Auswahl eingeben: 8 Liste mit ausgeliehenen Bücher: Traceback (most recent call last): File "tester.py", line 108, in <module> Bücher.displayUnavailableBooks() File "tester.py", line 62, in displayUnavailableBooks for books1 in self.books1: AttributeError: 'Bücher' object has no attribute 'books1'
Also, if it were me, I'd use strings instead of integers just because the script will handle errors like a letter being entered instead of a number. Here's my suggestion.
    while(True):
        willkomensNachricht = '''\n        Bibliothek-APP       
        Wähle eine Option:
        Alle Bücher anzeigen (1)
        Buch ausleihen       (2)
        Buch zurückbringen   (3)
        Verlassen            (4)
        Kundenliste anzeigen (5)
        Kunden hinzufügen    (6)
        Kunden entfernen     (7)
        Ausgeliehene Bücher  (8)
        anzeigen 
        '''
        print(willkomensNachricht)
        a = input("Auswahl eingeben: ")
        if a == '1':
            centraLibrary.displayAvailableBooks()
        elif a == '2':
            centraLibrary.borrowBook(Kunden.requestBook())
        elif a == '3':
            centraLibrary.returnBook(Kunden.returnBook())
        elif a == '4':
            print("Aufwiedersehen!")
            exit()
        elif a == '5':
            Kunden.displayAvailableKunden()
        elif a == '6':
                Kunden.addKunden()
        elif a == '7':
                Kunden.delKunden()
        elif a == '8':
            Bücher.displayUnavailableBooks()
        else:
            print("Error!")
Reply
#3
Do you have an idea how to fix the number 8 i've been trying multiple things and its still not working?
Reply
#4
(Mar-01-2022, 07:05 AM)klajdi7 Wrote: Do you have an idea how to fix the number 8 i've been trying multiple things and its still not working?
Yes, sinceBücheris aLibraryclass, you just need to initialize it that way. Try it like this and notice line 3.
class Bücher(Library):
    def __init__(self):
        super ().__init__ ()
        self.borrowBooks = []
 
    def displayUnavailableBooks(self):
        print("Liste mit ausgeliehenen Bücher: ")
        for books1 in self.books1: 
            print(" -" + books1 )
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020