Anfänger sucht Hilfe
Verfasst: Dienstag 21. September 2021, 12:59
Guten Tag Leute...
Ich habe mir das Buch "Python3 Programmieren für Einsteiger" von dem Autor Michael Bonacina gekauft.
Vielleicht kennt das einer von euch, oder hat es gar selbst?
Naja auf jeden Fall komme ich da nicht weiter.
Weil selbst die Musterlösung aus dem Buch bei mir nicht funktioniert.
Am Ende jedes Kapitels kommen 2 Übungsaufgaben.
Die erste lautet:
Schreibe ein Programm für eine Gästeliste. Diese soll eine Schleife erhalten, in der man beliebig viele Namen eintragen kann.
Wenn schon eine Gästeliste bestehen sollte, dann sollen die neuen Namen an die Liste angehängt werden.
Das wurde so gelöst:
f = open('dateien\gaeste.txt','a')
while True:
eingabe = input("Fügen Sie einen neuen Namen hinzu" +
"(Zum Abbrechen 'quit' eingeben): ")
if eingabe == "quit":
break
f.write(eingabe+"\n")
f.close() # <- selbst hinzugefügt weil es sonst nicht funktioniert hätte
Die zweite Aufgabe lautet:
Man soll ein Programm schreiben, was einen Gast von der Liste löscht.
Da keine Möglichkeit bekannt ist, einen Teilbereich der Datei zu entfernen, soll das Programm zunächst die komplette Liste einlesen und in einer Liste speichern.
Überprüfen Sie anschließend ob der Name enthalten ist.
Ist dies der Fall müssen Sie den Eintrag aus der Liste entfernen und die Datei erneut öffnen-dieses mal mit dem Attribut 'w', um den bisherigen Inhalt zu überschreiben.
Geben Sie eine Meldung aus, ob der Eintrag gelöscht wurde.
Oder ob er nicht in der Liste enthalten ist.
Das Musterbeispiel aus dem Buch:
f = open('dateien\gaeste.txt','r')
liste = f.readlines()
f.close()
geloescht = False
eingabe = input("Welchen Gast möchten Sie löschen? ")
for i in range(len(liste)):
if liste == eingabe + "\n":
f = open('dateien\gaeste.txt','w')
liste = liste[:i] + liste[i+1:]
for linie in liste:
f.write(linie)
print (eingabe, "wurde erfolgreich gelöscht.")
geloescht = True
break
if not geloescht:
print (eingabe, "ist nicht in der Liste enthalten.")
f.close()
Doch das funktioniert nicht.
Ich habe es schon mit .remove(eingabe + "\n") versucht, aber da war die Datei leer.
Und sonst habe ich im Internet auch nichts weiter dazu gefunden.
Meine Lösung war dann:
f = open('dateien\gaeste.txt', 'r')
liste = f.readlines()
f.close()
f = open('dateien\gaeste.txt', 'w')
eingabe = input("Welchen Gast möchten Sie löschen?")
for i in range(len(liste)):
if liste == eingabe+"\n":
liste = liste[:i] + liste[i+1:]
for linie in liste:
f.write(linie)
break
f.close()
Da konnte ich den Namen und nur den Namen löschen.
Habe aber dafür keine Ausgabe ob das nur Funktioniert hat, oder der Gast überhaupt auf der Gästeliste stand.
Meine Frage an euch a) Was ist an der Musterlösung aus dem Buch falsch? Veraltet vielleicht?
Und b) Wie kann ich meinen Code erweitern, damit ich die zweite Aufgabe lösen kann?
Ich habe mir das Buch "Python3 Programmieren für Einsteiger" von dem Autor Michael Bonacina gekauft.
Vielleicht kennt das einer von euch, oder hat es gar selbst?
Naja auf jeden Fall komme ich da nicht weiter.
Weil selbst die Musterlösung aus dem Buch bei mir nicht funktioniert.
Am Ende jedes Kapitels kommen 2 Übungsaufgaben.
Die erste lautet:
Schreibe ein Programm für eine Gästeliste. Diese soll eine Schleife erhalten, in der man beliebig viele Namen eintragen kann.
Wenn schon eine Gästeliste bestehen sollte, dann sollen die neuen Namen an die Liste angehängt werden.
Das wurde so gelöst:
f = open('dateien\gaeste.txt','a')
while True:
eingabe = input("Fügen Sie einen neuen Namen hinzu" +
"(Zum Abbrechen 'quit' eingeben): ")
if eingabe == "quit":
break
f.write(eingabe+"\n")
f.close() # <- selbst hinzugefügt weil es sonst nicht funktioniert hätte
Die zweite Aufgabe lautet:
Man soll ein Programm schreiben, was einen Gast von der Liste löscht.
Da keine Möglichkeit bekannt ist, einen Teilbereich der Datei zu entfernen, soll das Programm zunächst die komplette Liste einlesen und in einer Liste speichern.
Überprüfen Sie anschließend ob der Name enthalten ist.
Ist dies der Fall müssen Sie den Eintrag aus der Liste entfernen und die Datei erneut öffnen-dieses mal mit dem Attribut 'w', um den bisherigen Inhalt zu überschreiben.
Geben Sie eine Meldung aus, ob der Eintrag gelöscht wurde.
Oder ob er nicht in der Liste enthalten ist.
Das Musterbeispiel aus dem Buch:
f = open('dateien\gaeste.txt','r')
liste = f.readlines()
f.close()
geloescht = False
eingabe = input("Welchen Gast möchten Sie löschen? ")
for i in range(len(liste)):
if liste == eingabe + "\n":
f = open('dateien\gaeste.txt','w')
liste = liste[:i] + liste[i+1:]
for linie in liste:
f.write(linie)
print (eingabe, "wurde erfolgreich gelöscht.")
geloescht = True
break
if not geloescht:
print (eingabe, "ist nicht in der Liste enthalten.")
f.close()
Doch das funktioniert nicht.
Ich habe es schon mit .remove(eingabe + "\n") versucht, aber da war die Datei leer.
Und sonst habe ich im Internet auch nichts weiter dazu gefunden.
Meine Lösung war dann:
f = open('dateien\gaeste.txt', 'r')
liste = f.readlines()
f.close()
f = open('dateien\gaeste.txt', 'w')
eingabe = input("Welchen Gast möchten Sie löschen?")
for i in range(len(liste)):
if liste == eingabe+"\n":
liste = liste[:i] + liste[i+1:]
for linie in liste:
f.write(linie)
break
f.close()
Da konnte ich den Namen und nur den Namen löschen.
Habe aber dafür keine Ausgabe ob das nur Funktioniert hat, oder der Gast überhaupt auf der Gästeliste stand.
Meine Frage an euch a) Was ist an der Musterlösung aus dem Buch falsch? Veraltet vielleicht?
Und b) Wie kann ich meinen Code erweitern, damit ich die zweite Aufgabe lösen kann?