lehrkraefte:snr:altes-material:bruehl-ein-ausgabe-variablen

Ein- und Ausgabe, Variablen

Besprechung der Hausaufgabe.

Quiz zum letzten Mal

  • Wie geht Ein- und Ausgabe in Python?
  • Wie speichert man Daten und verarbeitet sie?
  • :-) Lernen geht am besten durch Spielen! :-)
  • :-) Beim Programmieren immer Sachen ausprobieren, den Code leicht verändern, kreativ sein! So kann man viel lernen. :-)

Ein (kurzes und flexibles) Programm entwerfen, das die folgende “Spirale” zeichnet:

Naive Lösung

Naive Lösung

Natürlich kann man das “von Hand” machen und alle Linien selbst zeichnen.

Diskussion und Analyse des Problems

Z. B.

  • Wie lang ist welche Linie?
  • Was sollte die Schildkröte können? Welche Fähigkeit fehlt ihr bisher?

Wir schreiben gemeinsam ein Programm1) und ich erkläre dabei möglichst viel (per Einzelschritt-Debugging durchgehen; Tabelle mit Namen und Werten und Typen der Variablen).

Variablen dienen dem Speichern von Daten, insbesondere von Zahlen und Zeichenketten/Text.

  • Jede Variable hat einen Namen und einen Wert.
  • Mit dem Zeichen “=” weist man einer Variablen einen Wert zu. Wenn die Variable noch nicht existiert, wird sie erzeugt.
  • Der Befehl x = 3 erzeugt eine Variable (mit Namen) x und Wert 3, wenn es noch keine Variable x gibt.
  • Existiert die Variable x bereits, so weist x = 3 der Variablen x den Wert 3 zu.
  • Rechts vom Gleichheitszeichen sind auch Ausdrücke erlaubt, die x enthalten, etwa x = 3 * x + 2 oder x = 3 * x + y. Dann wird der Ausdruck rechts des Gleichheitszeichens berechnet (dabei wird der “alte” Wert von x verwendet) und zum “neuen” Wert der Variablen x.
  • Jede Variable hat einen Typ, etwa den Typ int alias integer, also “normale” Zahl, oder den Typ float alias floating point, also Fliesskommazahl, d.h. Kommazahl.
  • Ein- und Ausgabe und weiteres ist in den Kommentaren im Programm in der nachfolgenden Aufgabe erklärt.

Unten steht mehr oder weniger das Programm, das wir gerade geschrieben haben, aber mit Zusatzkommentaren (falls ich mündlich etwas vergessen habe…). Führe es im Einzelschrittmodus aus und lies alle Kommentare. Bei jedem Schritt ändert sich etwas in Tigerjython, entweder im Ausgabefenster unten oder in der “Variablentabelle” rechts. Versuche, jeden einzelnen Schritt zu verstehen. Du darfst gerne Teile des Programms verändern. Bei Fragen melden!

# Ausgabe von Zeichenketten
print("Grüezi zäme!")
 
print("------------------")
print("Zahlen")
# Ausgabe von Zahlen und Rechnen mit Zahlen
print(5)
print(5+4)
print(5*3)
print(5/2)
 
 
print("------------------")
print("Variablen")
# Mit Variablen kann man Zahlen wie -2, -1, 0, 1, 2, ... 42 speichern.
# Das Gleichheitszeichen ist ein Zuweisungszeichen: 
# Der Variablen x wird der Wert rechts des Gleichheitszeichens zugewiesen.
x = 2
print(x)
 
# Man kann mit Variablen rechnen.
print(3*x)
 
# Variablen können wilde Namen haben. 
meinFreund_Nummer17a = 3 * x + 5
# Es ist Konvention, dass Variablen mit einem Kleinbuchstaben anfangen.
# Die meisten Sonderzeichen wie *, +, !, = in Variablennamen sind verboten,
# denn sie werden anderweitig verwendet.
# Auch bereits belegte Namen wie "print", "penUp" etc. sind verboten.
print(meinFreund_Nummer17a)
abc = meinFreund_Nummer17a / x
print(abc)
 
# Wie schon oben verwendet, hat das Gleichheitszeichen 
# beim Programmieren eine Zuweisungsfunktion.
# Die nächste Programmzeile weist der bereits existierenden Variablen x einen neuen Wert zu.
# Der Ausdruck rechts des Gleichheitszeichens wird (unter Verwendung des 
# "alten" Werts von x) berechnet. Das Ergebnis ist der neue Wert von x.
x = x+1
# Beachte, dass x hier sowohl rechts als auch links des 
# Zeichens "=" auftaucht.
#
# Achtung:
# In der Mathematik ist die obige Gleichung relativ uninteressant: Sie ist für keinen Wert von x erfüllt.
# Später: Die mathematische Abfrage auf Gleichheit wird mit "==" geschrieben.
 
print(x)
 
x= meinFreund_Nummer17a-x
print(x)
 
# Jede Variablen hat nicht nur einen Namen und einen Wert, sondern auch einen Typ.
print("------------------")
print("Der Typ einer Variablen")
 
print(type(x))
print(type(meinFreund_Nummer17a))
print(type(abc))
 
print("------------------")
print("Eingabe von Zahlen")
 
# Eingabe von Integers, also Zahlen ohne Komma.
# Die mit Anführungszeichen markierte Zeichenkette wird angezeigt.
# Zurückgeliefert wird die eingegebene Zahl. 
eingegebeneZahl = inputInt("Gib eine Zahl ein!")
# Oft ist es wie hier getan sinnvoll, sprechende Variablennamen zu verwenden.
# Dann erinnert man sich sofort, was gemeint ist.
print(eingegebeneZahl)
 
k = inputFloat("Gib eine Kommazahl (oder eine 'normale' Zahl) ein!")
print(k)

HAUSAUFGABE für die 1AFG:

Abgabe bis spätestens Sonntagabend 23:59 Uhr vor der nächsten Doppellektion über den folgenden Link:

Schreibe ein Programm, das vom Benutzer zwei Zahlen einliest (integer oder float, wie du willst) und ihre Summe und ihr Produkt ausgibt. Eine Beispielausgabe des Programms könnte lauten:

Salü!
-----------------------------
Eingegeben Zahlen:
13
und
-3
*****************************
Summe dieser Zahlen:
10
Produkt dieser Zahlen:
-29
-----------------------------
Uf Wiederluege!

HAUSAUFGABE für die 1CFP (oder eine der nachfolgenden Aufgaben):

Abgabe bis spätestens Sonntagabend 23:59 Uhr vor der nächsten Doppellektion über den folgenden Link:

Schreibe ein Programm, das eine Zahl (zwischen 1 und 10) entgegennimmt und die entsprechende Spalte in der Kleinen-Einmaleins-Tabelle ausgibt.

Bei Eingabe 7 sollte die Ausgabe so aussehen:

7
14
21
28
35
42
49
56
63
70

Bemerkung: Es geht ohne repeat-Struktur, aber deutlich eleganter mit repeat. Versuche, diese Lösung zu finden!

Hinweis:

Hinweis:

Verwende repeat 10: und ausserdem eine Variable vielfaches, die anfangs Null ist und in jeder Wiederholung um die eingegebene Zahl erhöht und ausgegeben wird.


Bonusaufgabe (Seerosenfläche auf einem (unendlich grossen) See verdoppelt sich jede Woche): Verändere das Programm so, dass zuerst die eingegebene Zahl ausgegeben wird und dann von jeder Zeile zur nächsten eine Verdopplung stattfindet. Statt einer Verdopplung (= Multiplikation mit 2) kannst du auch mit einem beliebigen anderen Wachstumsfaktor, etwa 1.3, multiplizieren. Dies simulert exponentielles Wachstum.

Turtle-Exkurs: Ersetze die drei letzten Zeilen des folgenden Programms so, dass es ein regelmässiges n-Eck mit Seitenlänge s zeichnet.

Für die angegebenen Werte soll also ein 7-Eck mit Seitenlänge 100 (in Pixel) gezeichnet werden. Wenn man stattdessen n = 13 und s = 80 schreibt, soll ein 13-Eck mit Seitenlänge 80 gezeichnet werden.

from gturtle import *
makeTurtle()
 
n = 7
s = 100
 
??????
??????
??????

Bemerkung: Wenn du n = 360 setzt und s klein wählst, bekommst du (fast) einen Kreis.

Erst selbst überlegen!

Erst selbst überlegen!

  • Ein- und Ausgabe (per Text oder Grafik) dienen der Kommunikation mit dem Computer.
  • Variablen sorgen dafür, dass der Computer (oder die Schildkröte :-)) sich etwas merken kann, also ein Gedächtnis hat!
  • Variablen beeinflussen die Programmausführung und sorgen dafür, dass das Programm flexibel auf verschiedene Eingaben reagieren kann.
  • Variablen haben einen Namen, einen Wert und einen Typ.

Key take-aways

Erst selbst überlegen!

Erst selbst überlegen!

  • Eingabe von Zahlen per inputInt(“…”), Eingabe von Kommazahlen per inputFloat(“…”).
  • Ausgabe per print(…), etwa von Zeichenketten per print(“Grüezi”) oder von Zahlen per print(2 * x + 3).
  • Variablen werden mit x = … erzeugt bzw. verändert.

Schreibe ein Programm, das eine positive Zahl entgegennimmt und die Summe aller Zahlen von 1 bis zu dieser Zahl ausrechnet.

Beispiel: Bei Eingabe 9 sollte als Ergebnis 45 ausgegeben werden, denn $1+2+3+4+5+6+7+8+9=45$. Die Ausgabe sollte also etwa so aussehen:

Die Summe aller Zahlen von 1 bis
9
ist
45

Schreibe ein Programm, das das Kleine Einmaleins als Tabelle ausgibt. Die Tabelle darf wild aussehen:

1  2  3  4  5  6  7  8  9  10  
2  4  6  8  10  12  14  16  18  20  
3  6  9  12  15  18  21  24  27  30  
4  8  12  16  20  24  28  32  36  40  
5  10  15  20  25  30  35  40  45  50  
6  12  18  24  30  36  42  48  54  60  
7  14  21  28  35  42  49  56  63  70  
8  16  24  32  40  48  56  64  72  80  
9  18  27  36  45  54  63  72  81  90  
10  20  30  40  50  60  70  80  90  100  

Benötigtes Zusatzwissen:

  • Mit str(x) wandelt man eine Integer-Variable x in eine Zeichenkette um.
  • Mit + kann man Zeichenketten hintereinanderhängen. Beispiel print(“Hallo ” + “Welt!”).

Zeichne mit der Turtle wie folgt eine Spirale.

Nach jeder $90^\circ$-Rechtsabbiegung geht die Turtle 10 Pixel weiter geradeaus als zuvor.

Am Anfang geht sie s = 10 Pixel geradeaus.

Insgesamt soll die Turtle n = 12 mal vorwärts gehen.

Bonusaufgabe (freiwillig): Ändere das Programm so, dass es die oben abgebildete Spirale (die sich von der gerade beschriebenen unterscheidet) zeichnet: Auf Häuschen-Papier wird jeder Gitterpunkt besucht.

Hausaufgabe (die eventuell schon während der Lektion erledigt werden kann)

Schreibe ein Programm, das vom Benutzer eine Zahl n erfragt und dann entsprechend viele konzentrisch ineinanderliegende Quadrate zeichnet, so dass das kleinste Quadrat Seitenlänge s = 10 hat und die Seitenlängen benachbarter Quadrate sich jeweils um differenz = 20 unterscheiden.

Farbe und Stiftdicke darfst du beliebig wählen. Die Stiftdicke darf auch von Quadrat zu Quadrat unterschiedlich sein.

Für n = 8 soll die Ausgabe so aussehen:

Abgabe bis spätestens Sonntagabend 23:59 Uhr vor der nächsten Doppellektion über den folgenden Link:

Hinweis:

Hinweis:

Verwende eine repeat-Struktur: In jeder Wiederholung wird ein Quadrat gezeichnet (und am Ende die Seitenlänge erhöht für das nächste Quadrat).

Damit die Quadrate alle ihren Mittelpunkt in der Mitte haben: Gehe jeweils mit home() auf die Ausgangsposition, dann um die halbe aktuelle Quadratseitenlänge nach oben und zeichne dann das Quadrat von dort aus.

Bonus (freiwillig): Du darfst auch konzentrisch ineinanderliegende $n$-Ecke oder Sterne o.ä. zeichnen.

Verändere das Programm für die Spirale so, dass der Winkel statt der Strecke nach jedem Abbiegen um eine fest Grösse, etwa $1^\circ$, verkleinert (oder vergrössert) wird.

Du kannst natürlich auch Winkel und Strecke gleichzeitig verändern.

Spiele herum: Verschiedene Längen und Abbiegewinkel am Anfang. Verschieden Winkel- und Längenvergrösserungen.

Du solltest etwa ein solches Bild erzeugen können (Strecke konstant, Winkelverkleinerung um $1^\circ$):

Bitte einfach am Anfang des Programms oder der eingereichten Datei die Frage aufschreiben (mit oder ohne Hashtag # als Kommentareinleitungszeichen am Zeilenanfang).

Link bereitstellen SORRY ONEDRIVE MACHT GERADE PROBLEME

Produkt und Summe

Produkt und Summe

WIRD HAUSAUFGABE, FALLS WIR NUR SO WEIT KOMMEN SOLLTEN.....

Spalte kleines Einmaleins

Spalte kleines Einmaleins

WIRD HAUSAUFGABE, FALLS WIR NUR SO WEIT KOMMEN SOLLTEN.....

$n$-Eck

$n$-Eck

einzufuegen

Bonusaufgaben

Summe der Zahlen von 1 bis zu eingegebener Zahl

Summe der Zahlen von 1 bis zu eingegebener Zahl

n = inputInt("Gib eine Zahl ein!")
summe = 0
i = 0
repeat n:
    i = i + 1
    summe = summe + i
print("Die Summe aller Zahlen von 1 bis")
print(n)
print("ist")
print(summe)

Kleines Einmaleins

Kleines Einmaleins

x = 0
repeat 10:
    x = x+1
    y=0
    s = ""
    repeat 10:
        y = y+1
        s = s + str(x*y) + "  "
# Die vorige Zeile auskommentieren und die nächste entkommentieren,
# wenn man eine anständige Tabelle will.
# Dies verwendet "formatierte Ausgabe".        
#        s = s + ("%4d" % (x*y))
    print(s)

1)
Das du später mehr oder weniger auf dieser Seite finden wirst.
  • lehrkraefte/snr/altes-material/bruehl-ein-ausgabe-variablen.txt
  • Last modified: 2022/02/27 09:16
  • by Olaf Schnürer