lehrkraefte:snr:informatik:bruehl-2022:ein-und-ausgabe-variablen

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:snr:informatik:bruehl-2022:ein-und-ausgabe-variablen [2022/02/27 07:57] – [Unser Programmier-Ziel heute] Olaf Schnürerlehrkraefte:snr:informatik:bruehl-2022:ein-und-ausgabe-variablen [2022/03/17 07:13] (current) Olaf Schnürer
Line 1: Line 1:
 +~~NOTOC~~
 +
 +====== Ein- und Ausgabe, Variablen ======
 +
 +==== Zum Aufwärmen: Wiederholung etc. ====
 +Besprechung der Hausaufgabe. 
 +
 +[[lehrkraefte:snr:informatik:bruehl-2022:algorithmen:quiz|Quiz zum letzten Mal]]
 +
 +==== Lernziele heute ====
 +
 +
 +  * Wie geht Ein- und Ausgabe in Python? 
 +  * Wie speichert man Daten und verarbeitet sie?
 +
 +==== Tipp des Tages ====
 +
 +  * :-) Lernen geht am besten durch Spielen! :-)
 +  * :-) Beim Programmieren immer Sachen ausprobieren, den Code leicht verändern, kreativ sein! So kann man viel lernen. :-)
 +
 +
 +===== Lernen am Beispiel und durch Demonstration =====
 +
 +Wir schreiben gemeinsam ein Programm((Das du später mehr oder weniger auf dieser Seite finden wirst.)) und ich erkläre dabei möglichst viel (per Einzelschritt-Debugging durchgehen; Tabelle mit Namen und Werten und Typen der Variablen).
 +
 +<WRAP center round info>
 +**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. 
 +</WRAP>
 +
 +==== Wiederholungsaufgabe ====
 +
 +<WRAP center round todo>
 +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!
 +
 +<code python>
 +# 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)
 +</code>
 +</WRAP>
 +
 +==== Aufgaben ====
 +
 +<WRAP center round todo 100>
 +
 +**HAUSAUFGABE für die 1AFG:**
 + 
 +Abgabe bis **spätestens Sonntagabend 23:59 Uhr** vor der nächsten Doppellektion über den folgenden Link:
 +
 +  * [[https://bldsg-my.sharepoint.com/:f:/g/personal/olaf_schnuerer_ksbg_ch/Eiv_N_pzTfFKhwrL34v63toBqSTCbdsshKmr2ygQqsk9Vg|Klasse 1AFGsK]]
 +
 +
 +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:
 +<code text>
 +Salü!
 +-----------------------------
 +Eingegeben Zahlen:
 +13
 +und
 +-3
 +*****************************
 +Summe dieser Zahlen:
 +10
 +Produkt dieser Zahlen:
 +-29
 +-----------------------------
 +Uf Wiederluege!
 +</code>
 +
 +
 +
 +</WRAP>
 +
 +<WRAP center round todo 100%>
 +
 +**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:
 +
 +  * [[https://bldsg-my.sharepoint.com/:f:/g/personal/olaf_schnuerer_ksbg_ch/Er2yNBSS4o9DpBiQ6TU5uq8B3n9WKibj_BA_HFspdDgQiA|Klasse 1CFP]]
 +
 +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:
 +<code text>
 +7
 +14
 +21
 +28
 +35
 +42
 +49
 +56
 +63
 +70
 +</code>
 +Bemerkung: Es geht ohne ''repeat''-Struktur, aber deutlich eleganter mit ''repeat''. Versuche, diese Lösung zu finden!
 +<hidden 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.</hidden>  
 +
 +----
 +
 +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.
 +</WRAP>
 +
 +
 +<WRAP center round todo 100%>
 +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.
 +<code python>
 +from gturtle import *
 +makeTurtle()
 +
 +n = 7
 +s = 100
 +
 +??????
 +??????
 +??????
 +</code>
 +
 +Bemerkung: Wenn du ''n = 360'' setzt und ''s'' klein wählst, bekommst du (fast) einen Kreis.
 +</WRAP>
 +
 +
 +
 +==== Zusammenfassung ====
 +
 +<hidden 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.  
 +</hidden>
 +
 +=== Key take-aways ===
 +
 +<hidden Erst selbst überlegen!>
 +  * Eingabe von Zahlen per ''inputInt("...")'', Eingabe von Kommazahlen per ''inputFloat("...")''. Einfacher geht es mit ''input("...")'', jedoch kann der Benutzer dann auch Zeichenketten (= Text) eingeben und eventuell führt das zum Absturz des Programms.
 +  * 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.
 +</hidden>
 +==== Bonusaufgaben (Textausgabe) ====
 +
 +<WRAP center round todo 100%>
 +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:
 +<code>
 +Die Summe aller Zahlen von 1 bis
 +9
 +ist
 +45
 +</code>
 +</WRAP>
 +
 +<WRAP center round todo 100%>
 +Schreibe ein Programm, das das Kleine Einmaleins als Tabelle ausgibt. Die Tabelle darf wild aussehen:
 +<code text>
 +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  
 +</code>
 +
 +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!")''.
 +</WRAP>
 +
 +
 +
 +===== Lösungsvorschläge =====
 +
 +<hidden Produkt und Summe>
 +<code python>
 +print("Salü")
 +x = input("Gib eine Zahl ein:"  
 +# input ist es egal, ob Kommazahl oder Nichtkommazahl oder Text.
 +# Man kann dies statt inputFloat oder inputInt verwenden.
 +y = input("Gib eine weitere Zahl ein:")
 +
 +print("Die eingegebenen Zahlen sind")
 +print(x)
 +print("und")
 +print(y)
 +print("") # Gibt eine leere Zeichenkette aus. Da "print(..)" nach der Ausgabe immer in die nächste Zeile geht, gibt dies eine Leerzeile aus.
 +
 +print("Die Summe dieser beiden Zahlen ist")
 +print(x+y)
 +print("Das Produkt dieser beiden Zahlen ist")
 +print(x*y)
 +
 +print("")
 +print("Uf Wiederluege!")
 +</code>
 +</hidden>
 +
 +<hidden Spalte kleines Einmaleins>
 +<code python>
 +x = inputInt("Gib eine Zahl ein!")
 +
 +vielfaches = 0
 +repeat 10:
 +    vielfaches = vielfaches + x
 +    print(vielfaches)
 +    
 +# Alternative Lösung:
 +#
 +# print("------------")
 +# i = 0
 +# repeat 10:
 +#     i = i + 1
 +#     print(i * x)
 +</code>
 +</hidden>
 +
 +<hidden $n$-Eck>
 +<code python>
 +from gturtle import *
 +makeTurtle()
 +
 +n = 7
 +s = 100
 +
 +repeat(n):
 +    forward(s)
 +    right(360/7)
 +</code>
 +</hidden>
 +    
 +
 +=== Bonusaufgaben ===
 +
 +<hidden Summe der Zahlen von 1 bis zu eingegebener Zahl>
 +<code python>
 +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)
 +</code>
 +</hidden>
 +
 +<hidden Kleines Einmaleins>
 +<code python>
 +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)
 +</code>
 +</hidden>
 +
 +===== Link zur Kursseite =====
 +
 +[[lehrkraefte:snr:informatik:bruehl-2022:|Zur Kursseite]]