lehrkraefte:snr:informatik:python:ersteschritte

(Stark beeinflusst von Ivo Blöchligers entsprechendem Kapitel in seinem Python-Kurs)

Variablen, Output und Input

Starte einen Browser und Tigerjython. Ordne diese beiden Fenster auf deinem Bildschirm so an, dass du gut Arbeiten kannst.

Traditionell ist das erste Programm in vielen Programmier-Lehrbüchern ein kleines Programm, das nur den Text “Hello world!” ausgibt. In Python geht das so.

Gib das folgende Programm im Tigerjython-Editor ein - wer mag, kann natürlich auch “Grüezi Schweiz!” oder Ähnliches schreiben.

print("Hello world!")

Speichere es in einem geeigneten Ordner unter dem Namen helloworld.py. Python-Programme sollten stets die Extension “py” haben (Extension = Dateinamenserweiterung (englisch file extension) = die Zeichenkette hinter dem letzten Punkt des Dateinamens - sie macht meist ersichtlich, welches Format die Datei hat, etwa “txt” für Textdateien).

Führe das Programm aus. Wo erscheint die Ausgabe?

Die vier Grundrechenarten Addition, Subtraktion, Multiplikation und Division werden in Python mit den Symbolen +, -, *, / kodiert.

Potenzieren wird mit ** (und nicht mit ^) kodiert.

Wie üblich gilt “Potenzieren vor Punkt vor Strich”.

Öffne eine neues, leeres Programm/Dokument, schreibe das folgende Programm ab (oder verwende copy+paste) und speichere es unter dem Namen rechenarten.py.

Bevor Du es ausführst: Welche Ausgaben erwartest du?

print("2+3*4 ergibt nicht 20, sondern:")
print(2+3*4)
print("2.0+3*4 wird wie folgt ausgegeben:")
print(2.0+3*4)
print("5-2**3 ergibt nicht 27, sondern:")
print(5-2**3)
print("1+2*3**2 ergibt weder 81 noch 37, sondern:")
print(1+2*3**2)
 
print("Ich kann ganz schön grosse Zahlen berechnen: Zwei hoch hundert ist")
print(2**100)
 
print("Die Wurzel aus 2 ist:")
print(2**0.5)

Versuche herauszubekommen, welche Rechenarten die Symbole // und % kodieren! Welche Werte haben 39 // 7 und 39 % 7?

Variablen können viele verschiedene Dinge speichern:

  • ganze Zahlen wie 5 oder -6 (englisch integer)
  • Kommazahlen wie 1.2345 (englisch floating point number, kurz float) - als “Komma” wird wie im englischen Sprachraum üblich der Punkt verwendet
  • Zeichenketten wie “Hallo” (englisch string)
  • vieles mehr, etwa Wahrheitswerte (True oder False), Listen, Mengen, … Das lernen wir teilweise später.

Namen von Variablen beginnen in der Regel mit einem Kleinbuchstaben, danach können weitere Kleinbuchstaben folgen, auch Grossbuchstaben, Ziffern und Unterstriche (= Bodenstriche) sind erlaubt - von der Verwendung von Umlauten und Sonderzeichen wird abgeraten, Leerzeichen sind nicht erlaubt. Variablennamen sollten kurz, aber aussagekräftig sein. Da die Sprache Python englische Begriffe verwendet (etwa print, if, else, for, while, …), ist es sinnvoll, deutsche Begriffe als Variablennamen zu verwenden.

Erstelle ein neues Programm mit folgenden Inhalt und verbessere es (Reihenfolge, Leerzeichen)!

# Dies ist ein Kommentar und wird bei der Ausführung ignoriert.
# Die Leerzeichen rechts und links des Gleichheitszeichens (das man eigentlich als Zuordnungszeichen bezeichnen sollte) dienen nur der bessere Lesbarkeit.
# Zeichenketten werden dadurch gekennzeichnet, dass sie von Anführungszeichen "..." umschlossen sind (auch möglich sind einfache Anführungszeichen '...').
gruss = "Hello"
adressat = "World"
ausgabe = adressat+gruss
print(ausgabe)

Erstelle ein neues Programm mit folgenden Inhalt. Noch ist es fehlerhaft.

Bevor Du es ausführst: Welche der Ausdrücke in den “print”-Befehlen hättest du als Erfinder von Python erlaubt? Welche Ausgabe erwartest du?

Kommentiere möglichst wenige “print”-Befehle aus (mit #), so dass das Programm fehlerfrei ausgeführt werden kann. Du kannst auch einfach das Programm laufen lassen und alles auskommentieren, was nicht klappt.

# Mit Strings (= Kurzbezeichnung für Variablen, die strings enthalten) rechnen
a = "23"
b = "5"
print(a+b)
print(a*b)
 
# Mit Integers (= Kurzbezeichnung für Variablen, die integers enthalten) rechnen
a = 23
b = 5
print(a+b)
print(a*b)
 
# Es ist eigentlich kein guter Stil (und in vielen Programmiersprachen nicht erlaubt),
# dass derselbe Variablenname einmal für eine Zeichenkette und einmal für eine Zahl verwendet wird.
 
# Ist Zahl * string definiert? 
s = "Hallo"
x = 5
y = 5.0
print(x*s)
print(s*x)
print(y*s)

Variablen muss ein Startwert zugeordnet werden (sie müssen initialisiert werden), bevor sie verwendet werden können. Beispielsweise ist die Variable “b” im folgenden fehlerhaften Programm nicht initialisiert.

a = 7
print(a*b)

Das (aus zwei Zeichen bestehende Symbol) \n steht für einen Zeilenumbruch in einer Zeichenkette.

Öffne die interaktive Konsole mit dem Fensterbutton der Menüleiste und teste dort die folgenden Befehle (zum Abschicken des Befehls die Return-Taste drücken):

print("Jedes\nWort\nin\neiner\nneuen\nZeile.")

oder vielleicht lesbarer

print("Jedes" + "\n" + "Wort" + "\n" + "in" + "\n" + "einer" + "\n" + "neuen" + "\n" + "Zeile.")

Beachte hier, dass das Spezialzeichen jeweils zwischen Anführungszeichen steht.

Die Konsole eignet sich beispielsweise zum Ausprobieren von Befehlen.

Ergänze

n = # eine beliebige natürliche Zahl

zu einem kurzen, aber lesbaren Python-Programm, dessen Ausgabe im Fall n = 4 das folgende $4 \times 4$-Raster ist. Für andere Werte von $n$ sollen entsprechende quadratische $n \times n$-Raster ausgegeben werden.

+--+--+--+--+
|  |  |  |  |
+--+--+--+--+
|  |  |  |  |
+--+--+--+--+
|  |  |  |  |
+--+--+--+--+
|  |  |  |  |
+--+--+--+--+

2aLM und 2dNP bis hier am 25.08.2021

Für die Eingabe von Werten per Tastatur während des Programmablaufs gibt es die folgenden Funktionen.

  • inputString liest die Eingabe als Zeichenkette ein (selbst dann, wenn eine Zahl eingegeben wird; Eingabe von 42 liefert den String “42”).
  • inputInt liest die Eingabe als ganze Zahl ein.
  • inputFloat liest die Eingabe als Kommazahl ein.

Teste die beiden folgenden Programme (der Befehl str wandelt einen Integer in einen String um).

s = inputString("Darf ich deinen Namen erfahren?")
print("Grüezi " + s + "!")
a = inputInt("Bitte eine ganze Zahl eingeben: ")
print("Die ersten vier Potenzen zu positiven Exponenten von " + str(a) + " sind " + str(a) + ", " + str(a*a) + ", " + str(a**3) + ", " + str(a**4) + ".")

Gib im zweiten Programm bewusst ein Wort statt einer Zahl ein! Was ändert sich bei der Ausführung, wenn man inputInt durch inputFloat ersetzt?

(Relativ schwierig: Nächstes Mal als Ziel Syntax wie %10.5f erklären. Nicht für Strings, auch nicht für Integers/Dezimalzahlen; letzteres geht auch mit %.0f.)

Teste den folgenden Code.

ganzzahl = 42             # Integer oder genauer Variable vom Typ Integer mit Wert 42
kommazahl= 3.1415926535   # Float
zeichenkette = "Grüezi"   # String
 
ausgabe = "Integer (in Dezimaldarstellung) %d" % ganzzahl
print(ausgabe)
print("")
 
print("Float %f" % kommazahl)
print("String %s" % zeichenkette)
print("Integer (in Dezimaldarstellung) %d, Float %f, String %s" % (ganzzahl, kommazahl, zeichenkette))
print("")
 
a = 5
print("Die ersten vier Potenzen zu positiven Exponenten von %d sind %d, %d, %d, %d." %  (a, a, a*a, a**3, a**4))
print("")
 
 
# Oder ohne Variablen:
print("Integer (in Dezimaldarstellung) %d, Float %f, String %s" % (2, 44.7, "Hoi"))

Der Operator % nimmt als linkes Argument einen String und als rechtes Argument einen Wert oder ein Tupel von Werten. Das Ergebnis ist ein String.

Die %d und %f und %s in der Zeichenkette werden durch den/die Werte ersetzt, die nach dem Operator % angegeben sind.

  • %d erwartet einen Integer und gibt diesen als Dezimalzahl aus (für die Experten: Ausgabe im Hexadezimalsystem per %x, im Oktalsystem per %o)
  • %f erwartet einen Float und gibt diesen mit sechs Nachkommastellen aus
  • %s erwartet einen String und gibt diesen aus

Wenn mehrere der %d, %f, %s in einer Zeichenkette auftreten, sind die einzusetzenden Werte nach dem Operator % in Tupelschreibweise in der gewünschten Reihenfolge anzugeben.

Genauere Formatierung: Der folgende Code zeigt die Float-Variable jeweils mit drei Nachkommastellen an, teilweise rechts- bzw. linksbündig oder mit führenden Nullen in einer 10 Zeichen breiten Box. Verstehst du die Syntax?

ff = 3.1415926535  # Float
print("Text davor%.3fText danach" % ff)
print("Text davor%10.3fText danach" % ff)
print("Text davor%-10.3fText danach" % ff)
print("Text davor%010.3fText danach" % ff)
print("Text davor0123456789Text danach")

Beim Arbeiten mit Float-Variablen muss man immer mit Rundungsfehlern rechnen, wie das folgende Programm zeigt!

Der Grund für den Fehler hier ist, dass der Computer mit Binärzahlen statt Dezimalzahlen rechnet.

print("(0.1+0.1)-(0.3-0.1) sollte doch Null sein, oder?")
f=(0.1+0.1)-(0.3-0.1)
print(f)
print("%.16f" % f)
print("%.17f" % f)
print("%.28f" % f)

Verstehst du die erste Ausgabe? Wenn nicht, lies Gleitkommazahl, Darstellung.

Die folgenden Aufgaben sind (bis auf minimale Ergänzungen) von Ivo Blöchliger kopiert.

Vervollständigen Sie:

n = inputInt("Wurzel von welcher Ganzzahl?")
wurzel = n**0.5  # hoch 1/2 entspricht der Wurzel (weil wenn man quadriert...)
# Hier fehlt die Ausgabe in der Form
# Die Wurzel von 10 ist ungefähr 3.16, genauer 3.16227766016837952

Schreiben Sie ein Programm, das den BMI (body mass index, eine total nutzlose Grösse) nach der Formel $\frac{m}{h^2}$ berechnet, wobei $m$ die Masse in kg und $h$ die Körpergrösse in m ist. Masse in kg und Grösse in cm sollen vom Benutzer eingelesen werden. Die Ausgabe soll in etwa wie folgt aussehen:

Der BMI bei einer Grösse von 1.65 m und einem Gewicht von 62 kg beträgt 22.8.

2aLM bis hier 01.09.2021

Definieren Sie 3 Variablen k (Kapital), p (Zinsatz) und n (Anzahl Jahre). Das Programm soll das mit Zinseszins verzinste Kapital nach n Jahren auf 2 Kommastellen gerundet ausgeben. Die Ausgabe soll z.B. wie folgt aussehen: (% wird mit %% ausgegeben)

Nach 20 Jahren ist das Kapital von 100.00 mit einem Zins von 1.0% auf 122.02 angewachsen.

2dNP bis hier am 01.09.2021

Wie aus dem folgenden Code-Beispiel ersichtlich, kann man auch Variablen bei der Formatierung von strings einsetzen.

platz = 9
s1 = ("Hello %"+str(platz)+"d World!") % 45
nachkommastellen = 3
s2 = ("Hello %"+str(platz)+"."+str(nachkommastellen)+"f World!") % 45.45
print(s1)
print(s2)

Quadratisches Raster

Quadratisches Raster

n = 7
z1 = "+--"
z2 = "|  "
print(n*(n * z1 + "+\n" + n * z2 + "|\n") + n * z1 + "+")

BMI-Berechnung

BMI-Berechnung

g = inputInt("Grösse in cm")
m = inputInt("Gewicht in kg")
h = g/100 # Grösse in m
BMI = m / (h**2)
print("Der BMI bei einer Grösse von %.2f m und einem Gewicht von %d kg beträgt %.1f." % (h, m, BMI))
  • lehrkraefte/snr/informatik/python/ersteschritte.txt
  • Last modified: 2022/08/27 23:01
  • by Olaf Schnürer