Hallo,
ich habe vor kurzem angefangen zu programmieren und arbeite mich durch ein Kompendium. Ich habe nun zu folgenden Codebeispiel eine Frage.
class Bevoelkerung:
2 """Erstellt das Objekt Bevoelkerung für eine Stadt."""
3 def __init__(self, stadt, bezirk, jahr, einwohner):
4 """
5 Initialisiert ein neues Objekt Bevoelkerung
6
7 Argumente:
8 * stadt (string): die untersuchte Stadt
9 * bezirk (string): der jeweilige Stadtbezirk
10 * jahr (int): das Analysejahr
11 * einwohner (int): Einwohnerzahl des Bezirks
12 """
13
14 self.stadt = stadt
15 self.bezirk = bezirk
16 self.jahr = jahr
17 self.einwohner = einwohner
18
19 def geteinwohner(self):
20 """
21 Gibt die Einwohnerzahl eines Bezirks zurück.
22 """
23 return self.einwohner
24
25 def seteinwohner(self, einwohner_neu):
26 """
27 Ändert die Einwohnerzahl des Bezirks.
28 """
29 self.einwohner = einwohner_neu
30
31 f = open("berlin.txt", "r")
32 daten = f.readlines()
33 liste = []
34 for i in range(4):
35 Stadt = daten[i*4]
36 Bezirk = daten[i*4+1]
37 Jahr = daten[i*4+2]
38 Einwohner = daten[i*4+3][/color]
39 liste += [Bevoelkerung(Stadt, Bezirk, Jahr, Einwohner)]
40 for i in range(4):
41 print("Einwohner {0}: {1}".format(liste.bezirk.strip(), liste.
42 geteinwohner()))
43 f.close()
Ich verstehe Zeile 34 - 38 dahingehend nicht, wie die Positionsangaben in den Klammern zu verstehen sind.
Vielleicht könnt ihr mir helfen:)
Viele Grüße
write, read Funktion und Klassen
@Georgie24,
"color" ist in diesem Codeabschnitt nicht definiert, aber da scheinen die Einwohner nochmal in einer Unterliste zu stehen.
Der Schrägstrich in
ist ein Syntaxfehler.
Das ist eine sehr umständliche Art solche Daten zu speichern, da es, wie du siehst, das Auslesen unnötig kompliziert macht.
Solche Daten sollten besser in einer JSON Datei gespeichert werden.
Da die Daten für Stadt, Bezirk, Jahr, Einwohner anscheinend immer in aufeinanderfolgenden Zeilen in der Textdatei stehen, werden die über die Indizes i, i+1, i+2, i+3 ausgelesen. Mit dem Multiplikator 4 kann man dann immer die nächsten 4 Zeilen referenzieren.Ich verstehe Zeile 34 - 38 dahingehend nicht, wie die Positionsangaben in den Klammern zu verstehen sind.
Vielleicht könnt ihr mir helfen:)
"color" ist in diesem Codeabschnitt nicht definiert, aber da scheinen die Einwohner nochmal in einer Unterliste zu stehen.
Der Schrägstrich in
Code: Alles auswählen
Einwohner = daten[i*4+3][/color]
Das ist eine sehr umständliche Art solche Daten zu speichern, da es, wie du siehst, das Auslesen unnötig kompliziert macht.
Solche Daten sollten besser in einer JSON Datei gespeichert werden.
@Georgie24: bitte nicht selbst Zeilen durchnummerieren. So ist der Code absolut unbrauchbar.
Die geteinwohner und seteinwohner sind unnötig und können weg.
Dateien öffnet man immer mit dem with-Statement. Text-Dateien brauchen immer das richtige encoding.
Statt über irgendwelche Indizes auf Daten zuzugreifen macht man das in einer for-Schleife direkt.
Man erzeugt keine ein-elementige Liste, nur um sie an eine andere Liste anzuhängen. Statt dessen benutzt man append.
Variablennamen werden generell komplett klein geschrieben.
Das Zeileende-Zeichen entfernt man gleich beim Einlesen, nicht erst beim Rausschreiben.
Wenn Jahr und Einwohner `int` sein sollen, dann muß man sie entsprechend umwandeln.
Die geteinwohner und seteinwohner sind unnötig und können weg.
Dateien öffnet man immer mit dem with-Statement. Text-Dateien brauchen immer das richtige encoding.
Statt über irgendwelche Indizes auf Daten zuzugreifen macht man das in einer for-Schleife direkt.
Man erzeugt keine ein-elementige Liste, nur um sie an eine andere Liste anzuhängen. Statt dessen benutzt man append.
Variablennamen werden generell komplett klein geschrieben.
Das Zeileende-Zeichen entfernt man gleich beim Einlesen, nicht erst beim Rausschreiben.
Wenn Jahr und Einwohner `int` sein sollen, dann muß man sie entsprechend umwandeln.
Code: Alles auswählen
class Bevoelkerung:
"""Erstellt das Objekt Bevoelkerung für eine Stadt."""
def __init__(self, stadt, bezirk, jahr, einwohner):
"""
Initialisiert ein neues Objekt Bevoelkerung
Argumente:
* stadt (string): die untersuchte Stadt
* bezirk (string): der jeweilige Stadtbezirk
* jahr (int): das Analysejahr
* einwohner (int): Einwohnerzahl des Bezirks
"""
self.stadt = stadt
self.bezirk = bezirk
self.jahr = jahr
self.einwohner = einwohner
def main():
with open("berlin.txt", endcoding="utf8") as lines:
bevoelkerungsdaten = []
for stadt in lines:
# four lines belong together
bezirk = next(lines)
jahr = next(lines)
einwohner = next(lines)
bevoelkerungsdaten.append(Bevoelkerung(stadt.strip(), bezirk.strip(), int(jahr), int(einwohner)))
for bevolkerung in bevoelkerungsdaten:
print(f"Einwohner {bevolkerung.bezirk}: {bevolkerung.einwohner}")
if __name__ == "__main__":
main()