lehrkraefte:blc:informatik:ffprg1-2020:ifelse

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:blc:informatik:ffprg1-2020:ifelse [2022/02/08 06:44] – [Vergleichsoperatoren] Ivo Blöchligerlehrkraefte:blc:informatik:ffprg1-2020:ifelse [2022/02/24 11:33] (current) – [If: Selektion, Bedingte Ausführung] Ivo Blöchliger
Line 1: Line 1:
 +====== If: Selektion, Bedingte Ausführung ======
 +Testen Sie folgendes Programm
 +<code python>
 +w = -5
 +print("Die Wurzel aus %f ist %f" % (w, w**0.5))
 +</code>
 +Anstatt einfach mit einem Fehler abzubrechen, könnte man vorher überprüfen, ob das Sinn macht:
 +<code python>
 +# -*- coding: utf-8 -*-
 +# Das ist ein Kommentar. Die obige Zeile erlaubt es 
 +# Umlaute ä, ö, ü in Kommentare zu schreiben. Sonst geht das in TigerJython aber nicht.
 +
 +w = float(raw_input("Zahl = "))
 +# Testen, ob die Wurzel überhaupt gezogen werden kann
 +if (w>=0):
 +    print("Die Wurzel aus %f ist ungefähr %f" % (w, w**0.5))
 +else:
 +    print("Keine Wurzel aus negativen Zahlen, sorry")
 +</code>
 +
 +Beachten Sie folgende Punkte:
 +  * raw_input liefert eine Zeichenkette vom Benutzer. Diese muss erst noch mit //float// in eine Zahl umgewandelt werden.
 +  * Am **Ende der Zeilen** mit if und else steht ein **Doppelpunkt**
 +  * Die Zeilen danach sind **eingrückt**. Es können mehrere eingrückte Zeilen vorkommen.
 +
 +
 +===== Vergleichsoperatoren =====
 +  * ''=='' (zwei! Gleichheitszeichen) zur Überprüfung der Gleichheit
 +    * das einfache Gleichheitszeichen wird für die Zuweisung (miss)gebraucht
 +  * ''<'', ''<nowiki><=</nowiki>'', ''>='', ''>''  Kleiner, Kleiner gleich, grösser gleich, grösser
 +  * ''!='' ungleich
 +
 +===== Logische Verknüpfungen in Python =====
 +  * ''and'' (beides, sowohl als auch)
 +  * ''or'' (das eine, das andere oder beides)
 +  * ''not'' (nicht)
 +  * ''!='' (für XOR, wenn das mal jemand braucht)
 +
 +Hinweis: Das ''and'' hat eine höhere Priorität als das ''or'' (wie das * eine höhere Priorität hat als das +).
 +
 +So erhält man ''True'' für den Ausdruck ''True or True and False'' weil zuerst das ''and'' ausgewertet wird. 
 +
 +''(True or True) and False'' ergibt dann aber ''False''.
 +
 +
 +===== Wahrheitswerte True und False =====
 +Das Ergebnis eines Vergleichs ist immer True oder False.
 +
 +Man beachte folgenden Code:
 +<code python>
 +ok = True
 +
 +# Overkill:  (ok==True ergibt einfach wieder True, und der folgende Block im if wird ausgeführt
 +if ok==True:
 +  print("Alles ok")
 +  
 +# Das reicht
 +if ok:
 +  print("Viel schlanker und einfacher zu lesen und schreiben")
 +</code>
 +===== Aufgaben =====
 +  * Schreiben Sie ein Programm, das die Temperatur vom Benutzer erfragt und dann mindestens drei Bereiche ausgibt, wie z.B. "kalt, warm, heiss".
 +  * Schreiben Sie ein Programm, das die quadratische Gleichung $ax^2+bx+c=0$ löst, wenn die Werte für $a$, $b$, $c$ am Programmbeginn gegeben sind. Unterscheiden Sie dazu die Fälle, je nach Anzahl der Lösungen
 +
 +<hidden Lösungsvorschläge>
 +<code python temperatur.py>
 +# -*- coding: utf-8 -*-
 +w = int(raw_input("Temperatur = "))
 +if w<0:
 +    print("Es ist kalt!")
 +elif w<10:
 +    print("Es ist kuehl!")
 +elif w<18:
 +    print("Es ist angenehm kuehl")
 +elif w<25:
 +    print("Angenehm warm")
 +else:
 +    print("Es ist heiss!")
 +</code>
 +
 +<code python quadratisch.py>
 +# -*- coding: utf-8 -*-
 +a=2
 +b=3
 +c=-3
 +
 +if a==0:
 +   print("Lineare Gleichung. Die Loesung ist x=%f" % (-c/b))
 +else:
 +    # Diskriminante
 +    d = b*b-4*a*c
 +    if (d<0):
 +        print("Keine Loesung, negative Diskriminate")
 +    elif d==0:  # Achtung, Vergleich mit Dezimalzahlen liefert nicht immer das gewuenschte Ergebnis!
 +        print("Diskriminate Null, genau eine Loesung x=%f" % (-b/(2*a)))
 +    else:
 +        d=d**0.5
 +        x1 = (-b+d)/(2*a)
 +        x2 = (-b-d)/(2*a)
 +        print("Zwei Loesungen. x1=%f, x2=%f" % (x1,x2))
 +</code>
 +</hidden>
 +
 +====== Quizz ======
 +True oder False? 
 +
 +Achtung: Aufgaben 4 und 5 können **ohne Rechnen** gelöst werden!
 +<quizlib id="quiz" rightanswers="[['a1'], ['a0'], ['a1'], ['a1'], ['a0']]" submit="Check Answers">
 +    <question title="&lt;pre&gt;2>3&lt;/pre&gt;" type="radio">True|False</question>
 +    <question title="&lt;pre&gt;7>9 or 9>7&lt;/pre&gt;" type="radio">True|False</question>
 +    <question title="&lt;pre&gt;not(True and (False or True))&lt;/pre&gt;" type="radio">True|False</question>
 +    <question title="&lt;pre&gt;234*345&lt;321*251 and False&lt;/pre&gt;" type="radio">True|False</question>
 +    <question title="&lt;pre&gt;234*345&lt;321*251 or True&lt;/pre&gt;" type="radio">True|False</question>
 +</quizlib>
 +