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
lehrkraefte:snr:informatik:glf22:python:if-else [2022/09/12 18:17]
Olaf Schnürer [Aufgabe zu if-else mit logischen Verknüpfungen: Schaltjahr]
lehrkraefte:snr:informatik:glf22:python:if-else [2022/12/01 18:39] (current)
Olaf Schnürer [Bonus-Material]
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 101: Line 103:
     print(str(jahr) + " ist ein Schaltjahr.")     print(str(jahr) + " ist ein Schaltjahr.")
 </code> </code>
 +
 +<hidden Nullter Hinweis>
 +Erinnerung:
 +  * Das Rechenzeichen ''%'' liefert den Rest bei ganzzahliger Division.
 +  * Das Vergleichszeichen ''=='' bzw. ''!='' testet auf Gleichheit bzw. Ungleichheit.
 +  * ... und dann gibt es noch die logischen Verknüpfungen ''and'' und ''or''.
 +</hidden>
  
 <hidden Erster Hinweis:> <hidden Erster Hinweis:>
Line 115: Line 124:
  
 <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). 
 </hidden> </hidden>
 </WRAP> </WRAP>
Line 133: 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 146: 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 349: 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 378: 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> 
Line 401: Line 405:
 Stell dir selbst ein Problem, das du mit den bereits vorhandenen Programmierkenntnissen lösen kannst. Stell dir selbst ein Problem, das du mit den bereits vorhandenen Programmierkenntnissen lösen kannst.
  
-Wenn du es mir mitteilst und es mir gefällt, nehme ich es gerne (mit Angabe des Autors bzw. der Autorin) in diesen Kurs auf!+Wenn du es mir mitteilst und es mir gefällt, nehme ich es gerne (je nach Wunsch mit oder ohne Angabe des Autors bzw. der Autorin) in diesen Kurs auf!
 </WRAP> </WRAP>
  
  • lehrkraefte/snr/informatik/glf22/python/if-else.1662999455.txt.gz
  • Last modified: 2022/09/12 18:17
  • by Olaf Schnürer