Einstieg - Mäusepopulation

Ausgabe mit einem Balkendiagramm

Bisher wurden sämtliche Populationswerte als Zahlen ausgegeben. Oft wählt man eine grafische Visualisierung der Größenangaben, z. B. mit Hilfe eines Balkendiagramms. Ein Python-Protokoll mit einer solchen grafischen Ausgabe könnte wie folgt aussehen:

>>> 
Anzahl der jungen Maeuse: 5
Anzahl der erwachsenen Maeuse: 8
Anzahl der alten Maeuse: 3
grafische Ausgabe:
OOOOO
OOOOOOOO
OOO

Hier werden die einzelnen Mäuse jeweils durch ein O dargestellt. Die erste Reihe steht für die jungen Mäuse, die zweite für die erwachsenen und die dritte für die alten Mäuse.

Aufgabe 1

Das folgende Programm erzeugt die oben gezeigte grafische Ausgabe.

# Eingabe der Populationswerte
jung = int(input("Anzahl der jungen Maeuse: "))
erwachsen = int(input("Anzahl der erwachsenen Maeuse: "))
alt = int(input("Anzahl der alten Maeuse: "))
# grafische Ausgabe der Populationswerte
print("grafische Ausgabe:")
# grafische Ausgabe von jung 
balken = ""
for i in range(jung):
    balken = balken + 'O'
print(balken)
# grafische Ausgabe von erwachsen 
balken = ""
for i in range(erwachsen):
    balken = balken + 'O'
print(balken)
# grafische Ausgabe von alt 
balken = ""
for i in range(alt):
    balken = balken + 'O'
print(balken)

Analysiere, wie hier die einzelnen Balken erzeugt werden.

Aufgabe 2

Das folgende Programm erzeugt ebenfalls die oben gezeigte grafische Ausgabe.

# Unterprogramm zur Bestimmung einer Balken-Zeichenkette 
def balken(laenge):
    zeichenkette = ""
    for i in range(laenge):
        zeichenkette = zeichenkette + 'O'
    return zeichenkette
    
# Eingabe der Populationswerte
jung = int(input("Anzahl der jungen Maeuse: "))
erwachsen = int(input("Anzahl der erwachsenen Maeuse: "))
alt = int(input("Anzahl der alten Maeuse: "))
# grafische Ausgabe der Populationswerte
print("grafische Ausgabe:")
print(balken(jung))
print(balken(erwachsen))
print(balken(alt))

Was ist hier anders gemacht? Welche Rolle spielt hier das sogenannte Unterprogramm balken(laenge)? Welche Rolle spielt wohl die Angabe in den Klammern bei diesem Unterprogramm?

Aufgabe 3

Ändere das Unterprogramm und seine Aufrufe wie folgt ab:

Aufgabe 4

Integriere die grafische Ausgabe in das bisher entwickelte Simulationsprogramm.

Aufgabe 5

Wenn die Populationwerte groß sind, dann eignet sich die bisher gewählte Darstellung nicht mehr, bei der jede einzelne Maus im Balkendiagramm mit einem Zeichen repräsentiert wird. Die einzelnen Balken werden zu lang und können auf dem Bildschirm nicht mehr in einer Zeile dargestellt werden. In einem solchen Fall ist es günstiger, statt der absoluten Zahlen die prozentualen Anteile der Altersgruppen durch einen Balken darzustellen. Bei einer solchen Veranschaulichung der relativen Anteile kann man die Maximallänge der Balken durch eine feste Zahl vorgeben. Ein Python-Protokoll, das die Populationsentwicklung auf diese Weise darstellt, könnte wie folgt aussehen:

>>> 
Anzahl der jungen Maeuse: 6
Anzahl der erwachsenen Maeuse: 9
Anzahl der alten Maeuse: 12
Anzahl der Simulationsschritte: 5
Veranschaulichung der relativen Haeufigkeiten (O entspricht 2%):
Schritt 0 : 6 9 12
OOOOOOOOOOO
OOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOO
Schritt 1 : 60 3 3
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OO
OO
Schritt 2 : 18 30 1
OOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O
Schritt 3 : 122 9 10
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOO
OOO
Schritt 4 : 56 61 3
OOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOO
O
Schritt 5 : 250 28 20
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOO
OOO

Aufgabe 5.1

Betrachte den Fall, dass die Population aus 6 jungen, 9 erwachsenen und 12 alten Mäusen besteht. Bestimme die prozentualen Anteile der Altersgruppen an der Gesamtpopulation.

Aus wie vielen Zeichen sollten die Balken zur Darstellung der prozentualen Anteile bestehen, wenn eine Maximallänge von 50 Zeichen vorgegen ist?

Aufgabe 5.2

Mit den folgenden Unterprogrammen kann man die Berechnungen aus Aufgabe 1 durchführen.

def anteil(bestand, gesamtheit):
    if gesamtheit > 0:
        a = float(bestand) / float(gesamtheit)
    else:
        a = 0.0
    return a

def absolut(anteil, gesamtheit):
    return anteil * gesamtheit

Das folgende Python-Protokoll zeigt, wie das geht:

>>> anteil(6, 6+9+12)
0.22222222222222221
>>> absolut(0.222, 50)
11.1
>>> int(absolut(anteil(6, 6+9+12), 50))
11

Kannst du erklären, wie die Ergebnisse des Python-Protokolls zustande kommen?

Versuch auch, die weiteren Berechnungen aus Aufgabe 1 analog auszuführen.

Aufgabe 5.3

Das folgende Python-Protokoll zeigt, wie man die in Aufgabe 5.2 durchgeführten Berechnungen nutzen kann, um die gewünschten Balken zu zeichnen. Beachte, dass die Prozedur balken deklariert sein muss.

>>> balkenlaenge_jung = int(absolut(anteil(6, 6+9+12), 50))
>>> balken(balkenlaenge_jung, 'O')
'OOOOOOOOOOO'

Ändere das bisher entwickelte Programm so ab, dass es die eingangs gezeigte Ausgabe erzeugt.

X

Fehler melden

X

Suche