Code für Python Programme

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Helmi
User
Beiträge: 2
Registriert: Montag 2. Dezember 2024, 15:00

Hallo, liebe Leute.
Könnte mir hier freundlicherweise jemand diese 3 Aufgaben lösen? Ich wäre sehr dankbar.
Daaanke.

Schreiben sie den Code für die folgenden Python-Programme. Halten sie sich dabei möglichst exakt an die Aufgabenstellung, zb. Ist ein Code, der die geforderten Ausgaben „hardcodiert“ ausgibt, keine gültige Lösung.

a.) Schleife.py: soll mit einer einzigen Schleife die Zahlen 1 bis 20 durchlaufen und dabei alle Zahlen mit print ausgeben, die ohne Rest durch 2 und zusätzlich alle Zahlen, die ohne Rest durch 3 teilbar sind. Verwenden sie dazu zweimal den Modulo-Operator (%... Rest einer Ganzzahl-Division) und vergleichen sie mit 0. Geben sie nach der Zahl in derselben Zeile auch den Text „ist durch 2 teilbar“ bzw. „ist durch 3 teilbar“ aus.


b.) Quadrate.py: soll für alle geraden Zahlen 10 bis zur 1 die Quadrat-Werte (10², 8², 6², usw.) berechnen und ausgeben. Sie können für die Berechnung eine normale Multiplikation verwenden oder den Exponent-Operator (x**2).



c.) Temperatur.py: dieses Programm hat 3 Variablen „temperature“, „limit“ und „tempTooHigh“ und soll mit einer Funktion „checkLimit“ überprüfen, ob „temperature“ über dem Wert von „limit“ liegt. Das Ergebnis der Überprüfung soll in der Funktion NICHT als Meldung ausgegeben werden, sondern der (globalen) Variablen „tempTooHigh“ als Bool-Wert (true/false) zurückgewiesen werden.
Schreiben sie außerhalb der Funktion dann 2 Funktionsaufrufe für „checkLimit“, um ihr Programm zu testen, d.h. setzen sie einmal „temperature“ größer und einmal kleiner als „limit“ und geben sie nach jedem Funktionsaufruf den Wert von „tempTooHigh“ aus.

Hinweis: die Funktion „checkLimit“ kann mit 3 Anweisungen (Zeilen) programmiert werden!
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Bitte einmal den Beitrag An alle Schüler und Studenten mit Informatikproblemen lesen. Danke. 😃

a) ist IMHO nicht so wirklich eindeutig beschrieben was passieren soll bei Zahlen die durch 2 *und* 3 teilbar sind.

Allgemeine Anmerkungen zu Namensschreibweisen: Per Konvention wird für Werte und Funktionsnamen in Python klein_mit_unterstrichen verwendet, und nicht mixedCase wie von den Aufgaben gefordert. Ich würde mich da bei der Lösung mit einer entsprechenden Anmerkung über die ”falsche” Schreibweise hinweg setzen und auf den Style Guide for Python Code verweisen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Nee, Hausaufgaben lösen wir eher nicht.
Wenn Du an irgend einer Stelle nicht weiter kommst, können wir gerne Tipps geben. Aber die Hauptarbeit muß schon von Dir kommen.
Bei Aufgabenteil C würde sich sowieso jeder weigern, das umzusetzen, weil erstens sich nicht an die Namenskonvention gehalten wird, zweitens mit kryptischen Abkürzungen gearbeitet wird und es drittens globale Variablen gibt. Hinweis: wenn die Funktion check_limit mehr als eine Anweisung hat, dann ist sie zu kompliziert.
Helmi
User
Beiträge: 2
Registriert: Montag 2. Dezember 2024, 15:00

Danke erstmal das überhaupt jemand reagiert hat.
Ich hab alles gelesen und weis auch das hier keine Hausaufgaben gemacht werden. Es ist auch nicht für mich, sondern für meinen Sohn. Er hat erst begonnen mit dem Thema programmieren.
Die Fragen a und b hat er ja noch lösen können. ich wollte nur sehen ob es irgendwie einfacher geht.
Bei c aber fehlt uns jeden Idee. Lt. Lehrer sind alle 3 Aufgaben in 15 min. zu lösen. Wir spielen schon seit Tagen herum und es kommt nichts raus.
Was die Schreibweise angeht. Ich hab sie kopiert und eingefügt. Sie ist also genauso wie er sie in der Schule bekommen hat.

Ich wäre für jede Hilfe dankbar. lg
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Helmi: Naja es sind doch aber Hausaufgaben. Wenn Du also weist, das die hier nicht einfach so gelöst werden… 🤔

Was heisst denn schon seit Tagen herumspielen konkret? Und nichts heraus kommen‽

Das die Schreibweise ”falsch” in der ursprünglichen Aufgabe steht, ist klar, das kann man in der Lösung dann ja ändern. Mit dem Hinweis auf die Namenskonventionen und dem Link. Kann der Lehrer auch was lernen. 😛

Wobei c) würde man, wie Sirius3 schon schrieb, so nicht machen wie das da gefordert wird. Globale Variablen sind keine Lösung, die sind ein Problem. Funktionen haben Rückgabewerte um Ergebnisse zu kommunizieren, die setzen oder verändern nicht irgendwelche globalen Variablen. Das ist unübersichtlich und fehleranfällig.

Edit: Wegen der Verbesserungsideen zu a) und b): Zeig doch einfach was ihr da habt, dann kann man dazu auch was sagen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Passend zum 50-jährigen Jubiläum vom Altair 8800 (Vor 50 Jahren: Die Hobbyisten machen sich auf den Weg zur PC-Revolution) die Aufgaben mal für diesen ersten Heimcomputer gelöst. Allerdings mit mehr als den 256 Bytes RAM des Grundsystems, weil Altair BASIC 4K wie der Name vermuten lässt, mindestens 4 KiB RAM benötigt. Und für Aufgabe c) braucht man sogar 8 KiB RAM, weil das 4K BASIC Vergleiche wirklich nur bei IF kann, und nicht in beliebigen Ausdrücken. Naja, waren halt die Anfänge von Microsoft und seinen BASIC-Implementierungen. 😇

a) Es gibt keinen Modulo-Operator, also habe ich den Test auf Teilbarkeit mit INT(), Division, Multiplikation, und einem Vergleich gebastelt. Es gibt auch kein BREAK um eine Schleife vorzeitig zu beenden, da kann man sich damit behelfen manuell die Schleifenvariable so zu setzen, dass NEXT keinen weiteren Durchgang macht. (BREAK hiess bei Microsofts BASIC-Dialekten dann auch EXIT FOR um eine FOR-Schleife zu beenden, als das endlich eingeführt wurde.)

Code: Alles auswählen

10 FOR I=1 TO 20:FOR D=2 TO 3
20 IF INT(I/D)*D=I THEN PRINT I;"ist durch";D;"teilbar.":D=3
30 NEXT D:NEXT I
Testlauf:

Code: Alles auswählen

RUN
 2 ist durch 2 teilbar.
 3 ist durch 3 teilbar.
 4 ist durch 2 teilbar.
 6 ist durch 2 teilbar.
 8 ist durch 2 teilbar.
 9 ist durch 3 teilbar.
 10 ist durch 2 teilbar.
 12 ist durch 2 teilbar.
 14 ist durch 2 teilbar.
 15 ist durch 3 teilbar.
 16 ist durch 2 teilbar.
 18 ist durch 2 teilbar.
 20 ist durch 2 teilbar.

OK
b) Das ist am einfachsten umsetzbar:

Code: Alles auswählen

10 FOR I=10 TO 1 STEP -2
20 PRINT I*I;
30 NEXT I
Testlauf:

Code: Alles auswählen

RUN
 100  64  36  16  4 
OK
c) Hier das Problem für das wir die 8K-Variante von dem BASIC brauchen. Die hat zusätzlich den Vorteil, dass man ganz einfache Funktionen mit einem Argument und einem Ausdruck als Funktionsinhalt definieren kann. So etwas war damals schon etwas über das man sich gefreut hat. 😎

Global sind sowieso fast alle Variablen, ausser das eine Argument von diesen Funktionen.

Code: Alles auswählen

10 L=36:REM Limit.
20 DEF FNC(T)=T>L
30 H=FNC(42):PRINT H
40 H=FNC(23):PRINT H
Testlauf:

Code: Alles auswählen

RUN
-1 
 0 

OK
Nanu, was das? Alle Zahlen ausser 0 sind ”wahr”, wie in Python. Es gibt keinen boole'schen Datentyp, da werden einfach Zahlen für missbraucht. Bei Vergleichsoperationen kommt -1 für “wahr“ heraus, was relativ clever ist, wenn man weiss, dass hier bei AND, NOT, und OR nicht zwischen boole'schen Operationen und bitweisen Verknüpfungen unterschieden wird, und die auf vorzeichenbehafteten 16-Bit Ganzzahlen operieren. -1 ist in der Binärdarstellung dann nämlich 16 gesetzte Bits und NOT dreht die alle um zu 0en, das heisst (NOT 0)=-1 und (NOT -1)=0.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten