1.10. Einwohnerzahl Europa¶
Bei dieser Aufgabe werden Sie sowohl Schleifen als auch Verzweigungen nutzen, um Daten aus einer Datei auszulesen und in sinvolle Datentypen abzuspeichern. In der Bonusaufgabe werden Sie einen Filter auf die Daten anwenden und eine Berechnung mit ihnen durchführen.
Die in dieser Aufgabe verwendete Datei finden Sie hier
.
Aufgabenteil A – Auslesen der Datei¶
Schreiben Sie ein Programm, dass den Inhalt der Datei einwohner_europa_2019.csv
ausließt und ausgibt.
Lösungsvorschlag¶
# Auslesen und Ausgeben einer Datei
file = open('einwohner_europa_2019.csv', 'r')
for line in file:
print(line)
GEO,Value
Belgien,11467923
Bulgarien,7000039
Tschechien,10528984
Daenemark,5799763
Deutschland einschliesslich ehemalige DDR,82940663
Estland,1324820
Irland,4904240
Griechenland,10722287
Spanien,46934632
Frankreich,67028048
Kroatien,4076246
Italien,61068437
Zypern,875898
Lettland,1919968
Litauen,2794184
Luxemburg,612179
Uganda,-1
Ungarn,9772756
Malta,493559
Niederlande,17423013
Oesterreich,8842000
Polen,37972812
Portugal,10276617
Rumaenien,19405156
Slowenien,2080908
Slowakei,5450421
Finnland,5512119
Schweden,10243000
Vereinigtes Koenigreich,66647112
Aufgabenteil B – Speichern in Listen¶
Verändern Sie obiges Programm, sodass die ausgelesenen Daten nicht mehr ausgegeben, sondern in zwei Listen gespeichert werden. Die Erste Zeile soll hierbei ignoriert werden. Die Liste mit den Einwohnern soll Zahlen anstelle von Strings enthalten.
Lösungshinweis¶
Benutzen Sie eine Bool-Variable um zu überprüfen, ob Sie gerade die erste Zeile der Datei auslesen. Alternativ können Sie mit der pop
-Methode von Listen Elemente an einer bestimmten Position löschen.
Lösungsvorschlag I¶
# Auslesen einer Datei und Speichern in Listen
laender = []
bevoelkerungen = []
erste_zeile = True
file = open('einwohner_europa_2019.csv', 'r')
# Speichern der Datei in zwei Listen
for line in file:
# Überprüfung, ob das Programm gerade die erste Zeile der Datei ausließt
if not erste_zeile:
# Aufteilen der Zeile in zwei Variablen
[land, einwohner] = line.split(',')
# Konvertierung in einen Integer
einwohner = int(einwohner)
# Erweiterung der Listen um die beiden Elemente der aktuell ausgelesenen Zeile
laender.append(land)
bevoelkerungen.append(int(einwohner))
else:
erste_zeile = False
print(laender)
print(bevoelkerungen)
file.close()
['Belgien', 'Bulgarien', 'Tschechien', 'Daenemark', 'Deutschland einschliesslich ehemalige DDR', 'Estland', 'Irland', 'Griechenland', 'Spanien', 'Frankreich', 'Kroatien', 'Italien', 'Zypern', 'Lettland', 'Litauen', 'Luxemburg', 'Uganda', 'Ungarn', 'Malta', 'Niederlande', 'Oesterreich', 'Polen', 'Portugal', 'Rumaenien', 'Slowenien', 'Slowakei', 'Finnland', 'Schweden', 'Vereinigtes Koenigreich']
[11467923, 7000039, 10528984, 5799763, 82940663, 1324820, 4904240, 10722287, 46934632, 67028048, 4076246, 61068437, 875898, 1919968, 2794184, 612179, -1, 9772756, 493559, 17423013, 8842000, 37972812, 10276617, 19405156, 2080908, 5450421, 5512119, 10243000, 66647112]
Lösungsvorschlag II¶
# Auslesen einer Datei und Speichern in Listen
laender = []
einwohner = []
file = open('einwohner_europa_2019.csv', 'r')
# Speichern der Datei in zwei Listen
for line in file:
laender.append(line.split(',')[0])
einwohner.append(line.split(',')[1])
# Entfernen des ersten Elements beider Listen
laender.pop(0)
einwohner.pop(0)
# Konvertieren der Elemente in Einwohner in Integers
for i in range(0,len(einwohner)):
einwohner[i] = int(einwohner[i])
print(laender)
print(einwohner)
file.close()
['Belgien', 'Bulgarien', 'Tschechien', 'Daenemark', 'Deutschland einschliesslich ehemalige DDR', 'Estland', 'Irland', 'Griechenland', 'Spanien', 'Frankreich', 'Kroatien', 'Italien', 'Zypern', 'Lettland', 'Litauen', 'Luxemburg', 'Uganda', 'Ungarn', 'Malta', 'Niederlande', 'Oesterreich', 'Polen', 'Portugal', 'Rumaenien', 'Slowenien', 'Slowakei', 'Finnland', 'Schweden', 'Vereinigtes Koenigreich']
[11467923, 7000039, 10528984, 5799763, 82940663, 1324820, 4904240, 10722287, 46934632, 67028048, 4076246, 61068437, 875898, 1919968, 2794184, 612179, -1, 9772756, 493559, 17423013, 8842000, 37972812, 10276617, 19405156, 2080908, 5450421, 5512119, 10243000, 66647112]
Aufgabenteil C – Filtern und Verwenden – Optional¶
Erweitern Sie Ihr Programm, sodass Länder, die eine negative Einwohnerzahl haben, aus beiden Listen gelöscht werden. Addieren Sie danach alle Einwohner, um die gesammte Einwohnerzahl aller EU-Staaten zu erhalten und geben sie das Ergebnis in Millionen aus.
Lösungshinweis¶
Falls Sie beim Löschen auf einen out-of-range IndexError
treffen, überlegen Sie sich, warum dies passiert und ob Sie vielleicht mit einer anderen Schleifenart das Problem umgehen können.
Lösungsvorschlag¶
# Auswerten von Daten
land = []
einwohner = []
file = open('einwohner_europa_2019.csv', 'r')
# Speichern der Datei in zwei Listen
for line in file:
land.append(line.split(',')[0])
einwohner.append(line.split(',')[1])
# Entfernen des ersten Elements beider Listen
land.pop(0)
einwohner.pop(0)
# Konvertieren der Elemente in Einwohner in Integers
for i in range(0,len(einwohner)):
einwohner[i] = int(einwohner[i])
# Entfernen von Ausreißern
i = 0
while i < len(einwohner):
if einwohner[i] < 0:
einwohner.pop(i)
land.pop(i)
i += 1
# Berechnung der gesammten EU-Bevölkerung
gesammtBev = 0
for i in einwohner:
gesammtBev += i
print(f'Die gesammte EU-Bevölkerung in 2019 waren ungefähr {gesammtBev/10**6:.2f} Millionen Personen.')
file.close()
Die gesammte EU-Bevölkerung in 2019 waren ungefähr 514.12 Millionen Personen.