lehrkraefte:snr:informatik:glf22:python:if-else

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
Last revision Both sides next revision
lehrkraefte:snr:informatik:glf22:python:if-else [2022/09/12 18:21]
Olaf Schnürer [Aufgabe zu if-else mit logischen Verknüpfungen: Schaltjahr]
lehrkraefte:snr:informatik:glf22:python:if-else [2022/10/28 13:50]
Olaf Schnürer [Aufgabe zu if-else mit logischen Verknüpfungen: Schaltjahr]
Line 87: Line 87:
  
 <WRAP center round todo> <WRAP center round todo>
-Ist eine Jahreszahl durch 4 teilbar, so handelt es sich um ein Schaltjahr, es sei denn, die Jahreszahl ist durch 100, aber nicht durch 400 teilbar, +ACHTUNGDie Aufgabe ist von der Logik her relativ kompliziert; der erste Hinweis entschärft dieses Problem.
-vgl. +
-https://de.wikipedia.org/wiki/Schaltjahr#Gregorianischer_Kalender.+
  
-Ersetze die Fragezeichen im folgenden Python-Programm durch einen booleschen Ausdruck, so dass es korrekt ausgibt, ob die Eingabe ein bzw. kein Schaltjahr ist. Teste deine Vermutung durch Eingabe der Jahreszahlen 7, 32, 300, 400.+Ist eine Jahreszahl durch 4 teilbar, so handelt es sich um ein Schaltjahr, es sei denn, die Jahreszahl ist durch 100, aber nicht durch 400 teilbar.  
 + 
 +(Diese komplizerte Regel sorgt grob gesagt dafür, dass die Frühlingstagundnachtgleiche immer am selben Tag des Kalenderjahres stattfindet, nämlich dem 21. März; für genauere Informationen siehe https://de.wikipedia.org/wiki/Schaltjahr#Gregorianischer_Kalender.) 
 + 
 +Ersetze die Fragezeichen im folgenden Python-Programm durch einen booleschen Ausdruck, so dass es korrekt ausgibt, ob die Eingabe ein Schaltjahr ist oder nicht. Teste deine Vermutung durch Eingabe der Jahreszahlen 7, 32, 300, 400.
  
 <code python schaltjahr.py> <code python schaltjahr.py>
Line 123: Line 125:
 <hidden Lösungsvorschlag:> <hidden Lösungsvorschlag:>
 <code python>(jahr % 4 != 0) or ((jahr % 100 == 0) and (jahr % 400 != 0))</code> <code python>(jahr % 4 != 0) or ((jahr % 100 == 0) and (jahr % 400 != 0))</code>
- 
-Alternativen: 
-<code python>not (jahr % 4 == 0) or ((jahr % 100 == 0) and not (jahr % 400 == 0))</code> 
-oder 
-<code python>not ((jahr % 4 == 0) and not ((jahr % 100 != 0) or (jahr % 400 == 0))</code> 
      
 Auf Grund der "Operator-Hierarchie" in Python (vgl. Punkt-vor-Strich-Regel in der Mathematik) hat der Ausdruck <code python>jahr % 4 != 0 or jahr % 100 == 0 and jahr % 400 != 0</code> dieselbe Bedeutung (denn ''and'' bindet stärker als ''or'' und Vergleichszeichen binden stärker als logische Verknüpfungen und Rechenzeichen binden stärker als Vergleichszeichen).  Auf Grund der "Operator-Hierarchie" in Python (vgl. Punkt-vor-Strich-Regel in der Mathematik) hat der Ausdruck <code python>jahr % 4 != 0 or jahr % 100 == 0 and jahr % 400 != 0</code> dieselbe Bedeutung (denn ''and'' bindet stärker als ''or'' und Vergleichszeichen binden stärker als logische Verknüpfungen und Rechenzeichen binden stärker als Vergleichszeichen). 
Line 140: Line 137:
 Sie kontrollieren bzw. steuern den Ablauf eines Programms. Sie kontrollieren bzw. steuern den Ablauf eines Programms.
  
-Bald werden wir noch die Kontrollstrukturen //Schleife// (= //loop//) und eventuell //Rekursion// (= //recursion//) kennenlernen. +Bald werden wir noch die Kontrollstrukturen //Schleife// (= //loop//) (oder Iteration) und eventuell //Rekursion// (= //recursion//) kennenlernen. 
  
 Bereits kennengelernt haben wir die "offensichtlichen" Kontrollstrukturen //Sequenz// (einfach diverse Anweisungen hintereinander, die entsprechend nacheinander ausgeführt werden) und //Blockstruktur// (etwa die beiden eingerückten Code-Blocks in einem if-else-statement). Bereits kennengelernt haben wir die "offensichtlichen" Kontrollstrukturen //Sequenz// (einfach diverse Anweisungen hintereinander, die entsprechend nacheinander ausgeführt werden) und //Blockstruktur// (etwa die beiden eingerückten Code-Blocks in einem if-else-statement).
Line 153: Line 150:
   * //bedingte Anweisung// statt //if-statement//, da eine Anweisung (oder ein Block von Anweisungen) nur unter einer Bedingung durchgeführt wird;   * //bedingte Anweisung// statt //if-statement//, da eine Anweisung (oder ein Block von Anweisungen) nur unter einer Bedingung durchgeführt wird;
   * //Verzweigung// statt //if-else-statement//, da der Programmablauf verzweigt (zwei mögliche Wege), am Ende kommen sie aber wieder zusammen; vgl. [[https://de.wikipedia.org/wiki/Bedingte_Anweisung_und_Verzweigung|bedingte Anweisung und Verzweigung]] (dort ist auch ein "Aktivitätsdiagramm", das den Begriff //Verzweigung// gut illustriert);   * //Verzweigung// statt //if-else-statement//, da der Programmablauf verzweigt (zwei mögliche Wege), am Ende kommen sie aber wieder zusammen; vgl. [[https://de.wikipedia.org/wiki/Bedingte_Anweisung_und_Verzweigung|bedingte Anweisung und Verzweigung]] (dort ist auch ein "Aktivitätsdiagramm", das den Begriff //Verzweigung// gut illustriert);
-  * //if-Selektion// oder //if-Auswahl// statt if-statement (da ein Codenblock nur dann ausgewählt und ausgeführt wird, wenn die sogenannte if-Bedingung zutrifft);+  * //if-Selektion// oder //if-Auswahl// statt if-statement (da ein Codeblock nur dann ausgewählt und ausgeführt wird, wenn die sogenannte if-Bedingung zutrifft);
   * if-(else-)Anweisung statt if-(else-)statement;   * if-(else-)Anweisung statt if-(else-)statement;
   * etc.   * etc.
Line 356: Line 353:
  
  
-===== Aufgabe: Lineare Gleichungen (in Standardform) am Computer lösen =====+===== Aufgabe: Lineare Gleichungen (in Standardform) vom Computer lösen lassen =====
  
 <WRAP round todo> <WRAP round todo>
-(1) Schreibe ein Programm, dass vom Benutzer zwei Zahlen $a$ und $b$ einliest. Das Programm soll ausgegeben, wie viele Lösungen die (lineareGleichung $ax+b=0$ hat. Danach sollen alle Lösungen ausgegeben werden.+(1) Schreibe ein Programm, dass vom Benutzer zwei Zahlen $a$ und $b$ einliest. Das Programm soll ausgegeben, wie viele Lösungen die lineare Gleichung $ax+b=0$ hat. Danach sollen alle Lösungen ausgegeben werden.
  
 Alle Spezialfälle sind zu behandeln (denke an Fälle wie $0X+2=0$ und $0X+0=0$). Alle Spezialfälle sind zu behandeln (denke an Fälle wie $0X+2=0$ und $0X+0=0$).
Line 385: Line 382:
     print("Die Gleichung hat genau eine Lösung, nämlich " + str(-b/a) + ".")     print("Die Gleichung hat genau eine Lösung, nämlich " + str(-b/a) + ".")
 elif b!= 0: elif b!= 0:
-    print("Die Gleinung hat keine Lösung.")+    print("Die Gleichung hat keine Lösung.")
 else: else:
     print("Die Gleichung hat jede reelle Zahl als Lösung.")</code>      print("Die Gleichung hat jede reelle Zahl als Lösung.")</code> 
  • lehrkraefte/snr/informatik/glf22/python/if-else.txt
  • Last modified: 2022/12/01 18:39
  • by Olaf Schnürer