Dateiname als Konstante

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
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Habe gerade "vereinsnamen" in "li_vereinsnamen" gändert, um den Überblick zu behalten. "li" steht für Liste.

In der Zeile "MANNSCHAFTEN_DATEINAME = "Mannschftsnamen.txt"" steht MANNSCHAFTEN. Ist "MANNSCHAFTEN" wirklich richtig? Im gesamten code kommt das Wort "Mannschaften" nicht vor. Müsste es nicht "MANNSCHAFTSNAMEN_Dateiname" lauten?

Code: Alles auswählen

 Alles auswählen

# -*-coding: utf8 -*-

anzahl_mannschaften=4
MANNSCHAFTEN_DATEINAME = "Mannschftsnamen.txt"

li_vereinsnamen=[]
for i in range (1, anzahl_mannschaften+1):
    mannschaft = input(f"Gebe den Namen der {i}. Mannschaft ein: ")
    print (f"Die {i}. Mannschaft ist {mannschaft}")
    li_vereinsnamen.append(mannschaft)
    print(i)
    print (type (i))
    print (mannschaft)
    # liste_vereinsnamen wird angezeigt
    print ((li_vereinsnamen),("vereinsnamen"))
    print ("Leerzeile")

with open("Mannschaftsnamen.txt", "w", encoding="utf8") as output:
    for li_vereinsname in li_vereinsnamen:
        output.write(f"{li_vereinsname}\n")

li_vereinsnamen = []
with open("Mannschaftsnamen.txt", encoding="utf8") as lines:
    for line in lines:
        li_vereinsnamen.append(line.rstrip())

for i in range (1, anzahl_mannschaften+1):
    print (li_vereinsnamen)
      
print ("End") 
[Code]
Benutzeravatar
noisefloor
User
Beiträge: 4193
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

die Frage nach der Sinnhaftigkeit von Code fragt man am besten den Autor des Codes - bist du das oder wer anders?

Im gezeigten Code wird `MANNSCHAFTEN_DATEINAME` nicht genutzt, also ist die Deklaration überflüssig.

Was aber ggf. sinnvolle wäre ist, alle Zeilen `with open("Mannschaftsnamen.txt", ... ) as...`in `with open(MANNSCHAFTEN_DATEINAME, ... ) as ...` umzubenennen, da du dann bei einer Änderung des Dateinamens nur eine Zeile im Code ändern musst und nicht drei.

Die Zeilen

Code: Alles auswählen

for i in range (1, anzahl_mannschaften+1):
    print (li_vereinsnamen)
machen so keinen Sinn, weil das `print` bei jedem Schleifendurchlauf das selbe ausgibt.

Gruß, noisefloor
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Um den Überblick zu behalten, ist es nicht sinnvoll, kryptische Präfixe zu verteilen. Der Plural in vereinsnamen zeigt schon, dass es eine Liste ist, wo ein Vereinsname nach dem anderen drinsteht. Da aber immer von Mannschaftsnamen die Rede ist, wäre vielleicht auch mannschaftsnamen sinnvoller.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Bill987654321: Um Himmelswillen *nein*. Fang *nicht* an Grunddatentypen in Namen zu stecken und schon gar nicht mit kryptischen Kürzeln. Datentypen ändert man im Laufe des Programms auch gerne mal und dann hat man entweder falsche, irreführende Namen oder muss die überall anpassen, obwohl sich an der Bedeutung des Wertes überhaupt nichts geändert hat.

Das es sich um mehr als einen Namen handelt sieht man ja bereits daran, dass der Name die Mehrzahl beschreibt. Was zu empfehlen ist, wäre auf Englisch zu benennen, denn dann hat man nur *sehr* selten den Fall das Einzahl und Mehrzahl gleich heissen, was im Deutschen leider häufiger auftritt.

Ja, Du kannst das auch MANSCHAFTSNAMEN_DATEINAME nennen. Nächste Frage wäre dann warum die Datei und diese Konstante so heisst, die Liste dann aber `vereinsnamen` und nicht `mannschaftsnamen` heisst. Ist das immer Deckungsgleich? Kann eventuell ein Verein nicht auch mehr als eine Mannschaft mit unterschiedlichen Namen haben? Zum Beispiel eine Herrenmannschaft und eine Frauenmannschaft (lustiges Wort übrigends)?

Und es nützt natürlich nichts die Konstante zu definieren, die im Code dann aber überhaupt nicht zu benutzen und da weiterhin den Wert wiederholt stehen zu haben.

Wenn `li_` für Liste steht, warum dann in der Schleife zum Schreiben der Namen in die Datei *einen* Namen, der ja *keine* Liste ist `li_vereinsname` nennen?

`anzahl_mannschaften` ist auch eine Konstante und sollte gross geschrieben werden.

Zwischen Funktion/Methode und öffnender Klammer für den Aufruf gehört kein Leerzeichen. Das wird da ja nicht mal konsequent falsch gesetzt. Wonach entscheidest Du das?

Klammern um einen einzelnen Namen oder literalen Wert machen keinen Sinn.

Der einzige Kommentar passt nicht mehr zum Inhalt. Ein Grund warum man in Kommentaren nicht beschreibt *was* der Code macht, denn dann muss man plötzlich noch daran denken einen überflüssigen Kommentar immer aktuell zu halten. Falsche Kommentare sind schlimmer als fehlende Kommentare, weil der Leser dann erst einmal herausfinden muss wem er glauben/wer falsch ist — der Code oder der Kommentar.

Beim einlesen würde sich eine „list comprehension“ anbieten.

Die Anzahl der Mannschaften sollte man bei der Ausgabe dann nicht mehr über die Konstante ermitteln sondern einfach die in der Liste vorhandenen Namen ausgeben. In der Schleife wird mit dem `print()` auch ein falscher Wert ausgegeben, nämlich immer die gesamte Liste.

Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python3

MANNSCHAFTSANZAHL = 4
MANNSCHAFTSNAMEN_DATEINAME = "Mannschaftsnamen.txt"


def main():
    mannschaftsnamen = []
    for i in range(1, MANNSCHAFTSANZAHL + 1):
        mannschaftsname = input(f"Gebe den Namen der {i}. Mannschaft ein: ")
        print(f"Die {i}. Mannschaft ist {mannschaftsname}.")
        mannschaftsnamen.append(mannschaftsname)
        print(i)
        print(type(i))
        print(mannschaftsname)
        print(mannschaftsnamen, "mannschaftsnamen")
        print("Leerzeile")

    with open(MANNSCHAFTSNAMEN_DATEINAME, "w", encoding="utf-8") as file:
        for mannschaftsname in mannschaftsnamen:
            file.write(f"{mannschaftsname}\n")

    with open(MANNSCHAFTSNAMEN_DATEINAME, encoding="utf-8") as lines:
        mannschaftsnamen = [line.rstrip() for line in lines]

    for mannschaftsname in mannschaftsnamen:
        print(mannschaftsname)

    print("End")


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Danke für die ausführlichen Erklärungen und den Code.
Habe gerade eine Stunde damit verbracht, die nächsten Frgen bezüglich Vereinsnamen/Mannschaftsnamen/Mannschaften zu schreiben. Diese Fragen wurden von dir beantwortet.
Antworten