Unterschiedliches Ergebnis bei Aufruf der gleichen Listen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
TommyR
User
Beiträge: 1
Registriert: Mittwoch 25. März 2026, 16:56

Unterschiedliches Ergebnis bei Aufruf der gleichen Listen


Hallo Mod,

Wenn ich hier in der falschen Abteilung bin, dann bitte ich, den Beitrag zu verschieben.
Ich habe ein Problem mit der Anzeige von Listen, das ich einfach nicht verstehe.
Ich habe mir zwei Listen, erstellt, die erste ist gefuellt mit Namen, und die zweite erst einmal mit Zahlen ( aber als String).
Abgesehen von Bedingungen , moechte ich die Namen von Liste eins einzeln loeschen, und in die Liste 2 schreiben.
Um die Arbeit nicht mehrmals zu machen, habe ich eine Zwischenspeicherung in jeweils eine Textdatei programmiert.
Jeweils eine Funktion zum Speichern, zum Laden und auch nur zum Ansehen.
Es werden jeweils 2 Parameter (die 2 Listen) uebergeben.
nach den Laden werden mir die Listen ueber print angezeigt.
Wenn ich aber mit der Funktion „drucke“ die Namen anzeige, dann bekomme ich andere Werte als
ich nach dem Einlesen angezeigt bekomme bei gleichen Print-befehl.
Ausserdem werden einmal die Namen hintereinander angezeigt, und bei der anderen Anzeige jeder Name in einer eigenen Zeile.
Das ist mir voellig unverstaendlich.

hier ist die Funktion es Einlesens aus der Textdatei mit Anzeige.

def lesen(fAWabe, fWabe):
with open("wabe_vorrat.txt", "r") as f:
fAWabe = f.read()
with open("wabe_ergebnis.txt", "r") as f:
fWabe = f.read()
print("geladen")
print(fAWabe)
print(fWabe)

return fAWabe, fWabe


und hier die Funktion der reinen Anzeige:

def drucke(fAWabe, fWabe):
print("Es verbleiben")
print(fAWabe)
print(fWabe)




Was mache ich falsch ? :roll:
Benutzeravatar
sparrow
User
Beiträge: 4648
Registriert: Freitag 17. April 2009, 10:28

Wie dir sicher aufgefallen ist, sind deine Einrückungen im Code verschwunden. Einrückungen sind in Python aber wichtig. Deshalb Code bitte immer in Code-Blöcke setzen. Die erscheinen automatisch, wenn du den </> Button im "vollständigen Editor" drückst. Dazwischen gerhört dein Code.

Deine Namenswahl ist schlecht.
Namen sollten leserlich sein, mit einem Kleinbuchstaben beginnen (außer die Namen von Klassen) und man trennt Wörter mit einem Unterstrich.
Leserlich heißt auch: Gerne etwas länger, den Sinn korrekt darstellend und Buchstaben kosten auch kein Geld.

Hübsch sähe dein Code dann so aus:

Code: Alles auswählen

def lesen(vorrat, ergebnis):
    with open("wabe_vorrat.txt", "r") as f:
        vorrat = f.read()
    with open("wabe_ergebnis.txt", "r") as f:
        ergebnis = f.read()
    print("geladen")
    print(vorrat)
    print(ergebnis)
    return vorrat, ergebnis

def drucke(vorrat, ergebnis):
    print("Es verbleiben")
    print(vorrat)
    print(ergebnis)
Die Namen sind immer nich nicht gut, aber den Kontext kennst nur du.

Wo unterscheidet sich da was?
Wenn in "drucke" ewas anderes ist als "lesen", liegt das daran, dass das unterschiedliche Werte _sind_.
In lesen ist das erste was du tust, auch direkt die übergebenen Paramater mit neuen Werten zu überschreiben. Warum übergibst du sie dann überhaupt?

Zeig bitte ein minimal lauffähiges Programm, mit dem man dein Problem nachvollziehen kann.
Bitte mit leserlichen Namen.
Benutzeravatar
__blackjack__
User
Beiträge: 14361
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@TommyR: Da Du weder zeigst was Du mit den Rückgabewerten von der `lesen()`-Funktion machst, noch wo die Argumente der `drucke()`-Funktion her kommen, kann man da nur sagen, dass das offensichtlich nicht die gleichen Werte sind.

Zumal Du von der `lesen()`-Funktion keine Listen bekommst. `read()` liefert bei einer Datei die im Textmodus geöffnet wurde eine Zeichenkette. Falls die Datei aus mehreren Zeilen besteht, führt die Ausgabe mit `print()` dementsprechend zum Dateiinhalt, also zu diesen Zeilen.

Die Argumente bei `lesen()` machen keinen Sinn, weil die Werte nirgends in der Funktion verwendet werden.

Die Namen `f`, `fAWabe`, und `fWabe` sind keine guten Namen. Namen sollten keine kryptischen Abkürzungen enthalten, oder gar nur daraus bestehen. Wenn man `file` meint, sollte man nicht nur `f` schreiben. Was das `f` in den anderen beiden Namen bedeutet kann ich nicht erraten, genau so wie das `A` in `fAWabe`.

Die Konvention in Python ist auch Namen klein_mit_unterstrichen zu schreiben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).

Beim öffnen von Textdateien sollte man die Kodierung mit angeben.
“It is easier to optimize correct code than to correct optimized code.” — Bill Harlan
Pedroski55
User
Beiträge: 49
Registriert: Freitag 25. Juli 2025, 00:20

Eventuell willst du etwas wie unten??

Code: Alles auswählen

# Ich habe mir zwei Listen, erstellt, die erste ist gefuellt mit Namen, und die zweite erst einmal mit Zahlen ( aber als String).
namen = ['Albert', 'Bertram', 'Calvin', 'David']
nums = [str(i) for i in range(1,5)]
neu = list(zip(nums, namen)) # = [('1', 'Albert'), ('2', 'Bertram'), ('3', 'Calvin'), ('4', 'David')]
Antworten