Seite 1 von 1
Klausurvorbereitung Python verstehen
Verfasst: Samstag 23. Juli 2022, 15:31
von Chrisseeey
Hallo ihr Lieben!
Ich lerne gerade für meine Python Klausur am Montag und hab noch ein wenig Verständnis probleme, wie genau ein Code was macht.
Ich arbeite gerade unsere Altklausuren durch und hab folgenden Code:
Code: Alles auswählen
L1 = ["is odd", "is even"]
L2 = [1, 2, 3]
res = ""
for i in L2:
res += str(i) + " " + L1[i % 2] + "; "
print(res)
Die Aufgabe lautet: Was ist die genaue Ausgabe des folgenden Codes? Korrigieren Sie den Code.
Der Code soll ja anscheinend bestimmen, ob die Zahl aus L2 gerade oder ungerade ist (L1). So wie es jetzt da steht wird für jedes element in L2 res zurück gegeben mit dem string des elements für L2 und L1 in dem das element durch 2 geteilt wird.
Bitte verurteilt mich nicht, ich bin kein Programmierprofi und gebe mir größte Mühe, alles zu verstehen, ich wüsste nur leider auf anhieb nicht, was genau jetzt geändert werden muss, damit der Code funktioniert.
Falls jemand Zeit und Lust hat mir ein wenig beim Verständnis zu helfen, damit ich die Klausur hoffentlich bestehe, wäre ich überaus dankbar

Re: Klausurvorbereitung Python verstehen
Verfasst: Samstag 23. Juli 2022, 15:52
von __deets__
Na hast du den code mal laufen lassen? Was macht der denn, und was nicht?
Nachtrag: es wird uebrigens nicht geteilt, es wird der Rest der Teilung durch 2 bestimmt.
Re: Klausurvorbereitung Python verstehen
Verfasst: Samstag 23. Juli 2022, 16:08
von Chrisseeey
Ja hab ihn laufen lassen und es kommt natürlich nicht das raus wie es eigentlich sollte

Gerade sagt er mir 1 ist gerade und 2 ist ungerade und 3 ist gerade. Wenn ich das % mit // ersetze gibt er mir bis auf die 3 zumindest das richtige raus
Re: Klausurvorbereitung Python verstehen
Verfasst: Samstag 23. Juli 2022, 16:16
von __deets__
Das % ist schon richtig so. Warum gibt er dir denn gerade/ungerade aus? Was passiert da? Wenn du das verstehst, ist der Fix trivial (und hat nichts mit dem Operator zu tun).
Re: Klausurvorbereitung Python verstehen
Verfasst: Samstag 23. Juli 2022, 20:13
von Sirius3
Warum wird Code in Klausuraufgaben oft so kryptisch geschrieben, dass man ihn gar nicht sofort verstehen kann?
Code: Alles auswählen
EVEN_ODD = ["even", "odd"]
numbers = [1, 2, 3]
result = []
for number in numbers:
result.append(f"{number} is {EVEN_ODD[number % 2]};")
print(" ".join(result))
Re: Klausurvorbereitung Python verstehen
Verfasst: Samstag 23. Juli 2022, 21:01
von ThomasL
@Sirius das print() soll bestimmt nicht in der Schleife stehen, oder?
Man könnte es noch etwas pythonischer machen
Code: Alles auswählen
EVEN_ODD = ["even", "odd"]
numbers = [1, 2, 3]
print("\n".join(f"{number} is {EVEN_ODD[number % 2]};" for number in numbers))
Re: Klausurvorbereitung Python verstehen
Verfasst: Samstag 23. Juli 2022, 23:07
von noisefloor
Hallo,
% ist der Modulo-Operator in Python. D.h `X % 2` gibt immer 0 oder 1 als Ergebnis, wenn X eine natürliche Zahl ist. 0 halt für gerade Zahlen, weil "gerade Zahl geteilt durch 2" immer geht ohne Rest / Nachkommastelle geht und "ungerade Zahl geteilt durch 2" gibt 1, weil sich ungerade Zahlen nicht durch 2 glatt teilen lassen.
Das Ergebnis der Modulo-Division wird dann im Code als Index für den Zugriff auf die Liste "L1" genommen. Ausdrücke werden in Python von innen nach aussen evaluiert, d.h. `L1[i%2], rechnet _erst_ `i%2` und das Ergebnis wird dann als Index eingesetzt, also entweder L[0] oder L[1], je nach Ergebnis. Und der Indexzugriff auf L1 liefert dann das ersten oder zweite Element von L1 zurück.
Gruß, noisefloor
P.S.: Bonuspunkte bekommst du, wenn du unter die Aufgabe schreibst, dass das zusammenbasteln von Strings mit + schlechter Stil ist. Das macht man mit f-Strings oder der Format-Methode von Strings. Bzw. hier besser die Ergebnisse in einer Liste sammeln und die Elemente dann zusammenfügen, wie gezeigt.
Re: Klausurvorbereitung Python verstehen
Verfasst: Sonntag 24. Juli 2022, 00:45
von __blackjack__
Alternativ zum Modulo-Operator könnte man hier auch die bitweise Und-Verknüpfung verwenden. Hier mal exemplarisch in einem BASIC-Einzeiler, statt in Python:
Code: Alles auswählen
10 A$(0)="EVEN":A$(1)="ODD":FOR N=1 TO 3:PRINT N;"IS ";A$(N AND 1);";";:NEXT
Testlauf:
Falls jemand Lust auf Code-Golf hat; folgende Ausgabe geht in Python mit 55 Zeichen:
Also natürlich mit den Zahlen als Daten aus einer Liste und nicht einfach `print()` und eine statische literale Zeichenkette.

Re: Klausurvorbereitung Python verstehen
Verfasst: Sonntag 24. Juli 2022, 13:08
von narpfel
Also ich komme auf 52 Zeichen für die gezeigte Ausgabe.
Re: Klausurvorbereitung Python verstehen
Verfasst: Montag 25. Juli 2022, 09:08
von bords0
51 (ohne Zeilenendezeichen):
Re: Klausurvorbereitung Python verstehen
Verfasst: Montag 25. Juli 2022, 12:01
von __blackjack__
Okay, wenn es auch erlaubt ist die drei Ausgaben jeweils in einer eigenen Zeile zu machen dann 48 (ohne Zeilenendezeichen).