Aufzug und Gedankenfehler

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
AngelFilmnMusic
User
Beiträge: 35
Registriert: Montag 3. Oktober 2022, 07:58

Hallo zusammen,

ich möchte einen Aufzug simulieren, der hoch- und runterfährt. Er soll also bspw. beim Hochfahren, wenn er > 1 und < 2 ist auf Ebene 2 halten. Und beim Runterfahren, wenn er > 1 und kleiner 2 ist auf Ebene 1 halten. Ist ja irgendwie normal. Im Code habe ich sicherheitshalber immer einen print zur Kontrolle. In meiner Theorie sollte er dann immer nur eine Ebene ausgeben, weil noch random.choice mit aufwärts und abwärts enthalten ist. In der Praxis werden aber immer zwei Ebenen ausgegeben, als ob zwei Aufzüge da sind. Ích weiß nicht, wo ich den Gedankenfehler im Code gemacht habe.
LG

Code: Alles auswählen

import random


aufwärts = random.uniform(0, 4)
abwärts = random.uniform(0, 4)

def bewegung():
    bewegung = random.choice([aufwärts, abwärts])

if aufwärts == 0:
    print("Aufwärts Ebene 0")
    
elif aufwärts > 0 and aufwärts < 1.01:
    print("Aufwärts Ebene 1")
    
elif aufwärts > 1 and aufwärts < 2.01:
    print("Aufwärts Ebene 2")
    
elif aufwärts > 2 and aufwärts < 3.01:
    print("Aufwärts Ebene 3")
    
else:
    print("Aufwärts Ebene 4")


if abwärts == 4:
    print("Abwärts Ebene 4")
    
elif abwärts > 3.01 and abwärts < 4:
    print("Abwärts Ebene 3")
    
elif abwärts > 2.01 and abwärts < 3:
    print("Abwärts Ebene 2")
    
elif abwärts > 1.01 and abwärts < 2:
    print("Abwärts Ebene 1")
    
else:
    print("Abwärts Ebene 0")
Das steht dann in der Konsole in der Ausgabe
Aufwärts Ebene 1
Abwärts Ebene 0
Sirius3
User
Beiträge: 18276
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Funktion `bewegung` ist unsinnig, weil sie weder Input noch Output hat.
Was ist der Sinn, dass Ebene 1 bis 1.01 geht, Ebene 2 aber schon bei >1 anfängt?
Du hast zwei if-elif-Ketten, eie für Aufwärts und eine für Abwärts. Warum wunderst Du Dich dann, dass Du zwei Ausgaben bekommst.

Das ganze läßt sich ohne if lösen:

Code: Alles auswählen

import math
import random

aufwärts = random.uniform(0, 4)
print(f"Aufwärts Ebene {math.ceil(aufwärts)}")

abwärts = random.uniform(0, 4)
print(f"Aufwärts Ebene {math.floor(abwärts)}")
Benutzeravatar
__blackjack__
User
Beiträge: 14069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@AngelFilmnMusic: Warum denkst Du denn es dürfte nur eine Ausgabe geben? Als erstes wird `aufwärts` definiert, und dann wird `abwärts` definiert. Dann gibt es ein ``if``/``elif``/``else``-Konstrukt das eine Ausgabe aufgrund des `aufwärts`-Wertes macht, und danach ein ``if``/``elif``/``else``-Konstrukt das eine Ausgabe aufgrund des `abwärts`-Wertes macht. Das sind zwei Ausgaben. Welche sollte denn Deiner Meinung nach nicht gemacht werden und warum?

Das mit dem zufälligen Dezimalbruch ist etwas komisch und statt >= und <= mit Zahlen zu vergleichen die noch mal 0.01 grösser sind, ist auch schräg.

Das was da bis jetzt steht, nur mit einer Ausgabe, könnte man einfach so ausdrücken:

Code: Alles auswählen

#!/usr/bin/env python3
import random


def main():
    print(
        random.choice(["Aufwärts", "Abwärts"]), "Ebene", random.randint(0, 4)
    )


if __name__ == "__main__":
    main()
Anmerkungen zu den ``if``/``elif``/``else``: Ich würde da nicht einfach beim ``else`` annehmen, dass es dann schon die 4. beziehungsweise 0. Ebene sein wird, sondern das auch explizit prüfen, und im ``else`` dann ein ``assert False`` weil der Fall dann nie auftreten dürfte wenn alles fehlerfrei programmiert ist.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
AngelFilmnMusic
User
Beiträge: 35
Registriert: Montag 3. Oktober 2022, 07:58

Danke @Sirius3 und @__blackjack__ Danke, genau, was ich vorhatte. Ich denke wahrscheinlich einfach zu kompliziert.

Der Grundgedanke wegen den ganzen if/else und 0.01, 1.01 etc. ist folgender. Wenn es brennt, soll der Aufzug in die Richtung weiterfahren in die er unterwegs ist, allerdings nicht bis zu der Ebene, zu der gedrückt wurde, weil das stehenbleiben und wieder in die entgegengesetzte Richtung fahren länger dauern wird. (Weiß nicht, wie es in Real funktioniert, habe ich mich noch nicht schlau gemacht, aber ich denke, es dauert länger)

Also, wenn jemand auf der Ebene 2 eingestiegen ist und auf Ebene 4 will , und der Aufzug schon in der Aufwärtsbewegung ist, soll er bis Ebene 3 fahren und dort stehen bleiben, nicht weiter bis 4. Oder wenn er von 2 auf 3 soll, dann auch auf Ebene 3. Deswegen die ganzen if und else mit den "n.1" Oder Abwärts das gleiche nur umgekehrt. Auch ein Grund weshalb ich uniform und nicht int gewählt bei random. Konnte ja keiner wissen, weil ich vergessen habe es zu schreiben
Benutzeravatar
Kebap
User
Beiträge: 776
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Die Kollegen meinen, dass du nicht "< 2" und "> 2.01" prüfen sollst, sondern "<= 2" und "> 2".

Sonst übersieht dein Programm viele Zahlen, die zwischen 2 und 2.01 liegen.
Ich denke wahrscheinlich einfach zu kompliziert.
Nein, ich finde du denkst ganz normal und kennst diese Konstrukte wahrscheinlich einfach noch gar nicht. :mrgreen:
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
AngelFilmnMusic
User
Beiträge: 35
Registriert: Montag 3. Oktober 2022, 07:58

Hallo @Kebap,

danke für deine Nachricht. Ja stimmt, ich brauche ja gar keine n.01 er Abfragen 🤦‍♂️ mit den n.01 er abfragen.
Das reicht ja dann

Beispiel für Ebenen 2 und 3.

Code: Alles auswählen

if aufzug > 1 and aufzug <= 2:
    print("Halt Ebene 2")
    
elif aufzug > 2 and aufzug <= 3:
    print("Halt Ebene 3")
AngelFilmnMusic
User
Beiträge: 35
Registriert: Montag 3. Oktober 2022, 07:58

Funktioniert jetzt fast so wie ich wollte. Danke an alle. Jetzt muss ich nur das eine vom anderen ausschließen. Also wenn er in aufwärts ist, soll abwärts gar nicht mehr berücksichtigt werden oder umgekehrt. Habe es mit random.choice([abwärts, aufwärts]) True und False etc. versucht, aber irgendwie ohne Erfolg. Gibt immer irgendwie beide Richtungen in der Konsole aus

Code: Alles auswählen

import random


abwärts = random.uniform(0, 4)
aufwärts = random.uniform(0, 4)

if abwärts == 4:
    print("Halt Ebene 4")
    
elif abwärts >= 3 and abwärts < 4:
    print("Abwärtshalt Ebene 3")
    
elif abwärts >= 2 and abwärts < 3:
    print("Abwärtshalt Ebene 2")
    
elif abwärts >= 1 and abwärts < 2:
    print("Abwärtshalt Ebene 1")
    
elif abwärts >= 0 and abwärts < 1:
    print("Abwärtshalt Ebene 0")
    
    
if aufwärts == 0:
    print("Halt Ebene 0")
    
elif aufwärts > 0 and aufwärts <= 1:
    print("Aufwärtshalt Ebene 1")
    
elif aufwärts > 1 and aufwärts <= 2:
    print("Aufwärtshalt Ebene 2")
    
elif aufwärts > 2 and aufwärts <= 3:
    print("Aufwärtshalt Ebene 3")
    
elif aufwärts > 3 and aufwärts <= 4:
    print("Aufwärtshalt Ebene 4")
Allgemeine Frage noch zu math (wird im Code nicht mehr benutzt), aber als math noch drin war, war folgendes:
Im Variablen Explorer wurden die genauen werte angezeigt. Bspw. 0.12349471, 3.59746464 usw. Und dementsprechend verhielt sich auch der Aufzug und funktionierte auch. Kann es denn sein, dass math in der Konsole nur aufgerundete Zahlen ausgibt? Wenn der Wert zum Beispiel 0.1258464 ist, wird 1 ausgegeben, wenn der Wert 2.2656496 wird 3 ausgegeben usw.
Benutzeravatar
Dennis89
User
Beiträge: 1560
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

das macht 'ceil' aus 'math'. Siehe dazu:
https://docs.python.org/3.8/library/math.html#math.ceil

Aber es wird ja hier nicht einfach gerundet, dann die Regeln für das runden treffen nicht zu wenn aus 0.1258 eine 1 wird. Gerundet wäre da eine 0. Deswegen 'math.ceil'.

Grüße
Dennis

Edit: Ich habe den Thread ehrlich gesagt nur überflogen, aber bist du dir sicher, dass der letzte Code richtig funktioniert?
Bei 'aufwärts' = 'abwärts' = 3.8357430466953337

erhalte ich folgende Ausgabe:

Code: Alles auswählen

Abwärtshalt Ebene 1
Aufwärtshalt Ebene 4
Also wenns brennt fährt er von 3,8 bis auf 1?
"When I got the music, I got a place to go" [Rancid, 1993]
AngelFilmnMusic
User
Beiträge: 35
Registriert: Montag 3. Oktober 2022, 07:58

ich habe es geschafft. Nochmal danke an alle und @Dennis, dass du schon so früh am Morgen anwortest :D Nein, wenn es brennt fährt er von 3,8 auf 4, falls er hochfährt, falls er runterfährt von 3,8 auf 3.
Code sieht jetzt so aus und macht genau, was ich will. Wenn ich jetzt noch schaffe es an eine random.choice mit True False für die BMZ zu koppeln, dann passt das. Also, wenn die BMZ losgeht, dann soll das ausgeführt werden

Code: Alles auswählen

import random


abwärts = random.uniform(0, 4)
aufwärts = random.uniform(0, 4)

aufzug = random.choice([True, False])

if aufzug == True:
    abwärts
    
    if abwärts == 4:
        print("Halt Ebene 4")
        
    elif abwärts >= 3 and abwärts < 4:
        print("Abwärtshalt Ebene 3")
        
    elif abwärts >= 2 and abwärts < 3:
        print("Abwärtshalt Ebene 2")
        
    elif abwärts >= 1 and abwärts < 2:
        print("Abwärtshalt Ebene 1")
        
    elif abwärts >= 0 and abwärts < 1:
        print("Abwärtshalt Ebene 0")

    
elif aufzug == False:
    aufwärts
    
    if aufwärts == 0:
        print("Halt Ebene 0")
        
    elif aufwärts > 0 and aufwärts <= 1:
        print("Aufwärtshalt Ebene 1")
        
    elif aufwärts > 1 and aufwärts <= 2:
        print("Aufwärtshalt Ebene 2")
        
    elif aufwärts > 2 and aufwärts <= 3:
        print("Aufwärtshalt Ebene 3")
        
    elif aufwärts > 3 and aufwärts <= 4:
        print("Aufwärtshalt Ebene 4")
Benutzeravatar
Dennis89
User
Beiträge: 1560
Registriert: Freitag 11. Dezember 2020, 15:13

So früh ist es auch nicht mehr, der erste Kaffeee ist schon zwei Stunden her :mrgreen:

Da steht noch ein 'abwärts' und ein 'aufwärts' im Code, das nichts macht.
Wahrheitswerte musst du nicht nochmal nach True oder False abfragen.

Code: Alles auswählen

if aufzug == True:
ist das geiche wie

Code: Alles auswählen

if aufzug:

Code: Alles auswählen

if aufzug == False:
ist das gleiche wie

Code: Alles auswählen

if not aufzug:
'aufzug' soll die Fahrtrichtung angeben? Da wäre vielleicht ein Namen sinnvoller, der einem das gleich "sagt".

Schön das du Erfolg hattest.

Grüße
Dennis

Edit: Ich verstehe glaub wieso da 'aufwärts' und 'abwärts' steht. Du willst zeigen, welche Fahrrichtung in dem Block abgearbeitet wird? Wenn man Code kommentieren will, dann setzt man ein '#' davor, also so:

Code: Alles auswählen

if aufzug:
    # Fahrrichtung abwärts
    if ...
    
"When I got the music, I got a place to go" [Rancid, 1993]
Sirius3
User
Beiträge: 18276
Registriert: Sonntag 21. Oktober 2012, 17:20

Dass ein Aufzug `True` oder `False` sein soll, ist sehr verwirrend. Variablennamen sollten das ausdrücken, was sie auch beinhalten, hier also `aufzug_fährt_abwärts`.
Dass es eine Position `aufwärts` und eine `abwärts` gibt ist auch falsch, denn der Aufzug steht ja nur an einer Stelle. Wenn man eine lange if-Kette durch eine einfache Funktion ersetzen kann, dann sollte man das auch tun.

Code: Alles auswählen

import math
import random


position = random.uniform(0, 4)
richtung = random.choice(["auf", "ab"])

if richtung == "ab":
    if position == 4:
        print("Halt Ebene 4")
    else:
        print(f"Abwärtshalt Ebene {math.floor(position)}")
elif richtung == "auf":
    if position == 0:
        print("Halt Ebene 0")
    else:
        print(f"Aufwärtshalt Ebene {math.ceil(position)}")
else:
    assert False, "ungültige Richtung"
Benutzeravatar
__blackjack__
User
Beiträge: 14069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Und jetzt die Frage nach dem Sinn: Warum ist das wichtig 5 Ebenen zu haben? Das Verhalten ist doch zwischen jeder Ebene gleich, also ob der Aufzug nun bei 0.42, 1.42, 2.42, oder 3.42 ist — er fährt immer die gleiche Strecke bis zum nächsten Halt, unabhängig von der Richtung.

Die nächste Frage ist dann warum ist die Unterscheidung zwischen Auf- und Abwärts wichtig? Denn ob der Aufzug sich bei 0.2 in eine Richtung oder bei 0.8 in die andere Richtung befindet, ist das die gleiche Strecke, und wenn beide Positionen gleich wahrscheinlich sind, welchen Unterschied macht das dann tatsächlich für die Auswertung der Simulation?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
AngelFilmnMusic
User
Beiträge: 35
Registriert: Montag 3. Oktober 2022, 07:58

Ich denke oder hoffe, dass die offenen Fragen beantwortet werden mit meiner Antwort.
- Ich hatte das gar nicht auf dem Schirm, dass abwärts und aufwärts gar keine Funktion hatten :) habe ich entfernt. Danke :)

- Es geht ja nicht darum, dass der Aufzug einfach nur auf einer Ebene halten soll. Es geht darum, dass, wenn er hochfährt und er zwischen zwei Ebenen ist, die Fahrtrichtung nach oben einbehält und auf der nächsten Ebene hält, wenn die Brandmeldezentrale anspringt. Daher auch diese Zwischenwerte von 1.53564, 2.89542 usw., aber in der Ausgabe soll dann auch nur das erscheinen. Und wenn er abwärts fährt, soll dann nur abwärts und die jeweilige Ebene erscheinen.

- Wenn ich mit int, anstatt float arbeiten würde, dann könnte er nie zwischen zwei Ebenen sein, sondern immer nur direkt auf einer der Ebenen und ich könnte die " pseudo Simulation" ja gar nicht haben.

- Und fünf Ebenen einfach nur so. Erdgeschoss und vier Obergeschosse. Könnten auch zwei oder 20 sein. Das hat jetzt keinen besonderen Grund

- Diesen Ausschluss, dass nicht immer beide Werte, also aufwärts und abwärts ausgegeben werden, konnte ich nur mit True und False bewerkstelligen. Wie eben schon erwähnt soll diese Ausgabe aber nur dann erfolgen, wenn die BMZ anspringt. Und exakt das klappt jetzt. Hier der aktuelle Code:

- Ich möchte den normalen Dauerbetrieb gar nicht anzeigen

Code: Alles auswählen

import random


abwärts = random.uniform(0, 4)
aufwärts = random.uniform(0, 4)

aufzug = random.choice([True, False])

bmz = random.choice([True, False])

if bmz == True:
    if aufzug == True:
        
        if abwärts == 4:
            print("Halt Ebene 4")
            
        elif abwärts >= 3 and abwärts < 4:
            print("Abwärtshalt Ebene 3")
            
        elif abwärts >= 2 and abwärts < 3:
            print("Abwärtshalt Ebene 2")
            
        elif abwärts >= 1 and abwärts < 2:
            print("Abwärtshalt Ebene 1")
            
        elif abwärts >= 0 and abwärts < 1:
            print("Abwärtshalt Ebene 0")
    
        
    elif aufzug == False:
        
        if aufwärts == 0:
            print("Halt Ebene 0")
            
        elif aufwärts > 0 and aufwärts <= 1:
            print("Aufwärtshalt Ebene 1")
            
        elif aufwärts > 1 and aufwärts <= 2:
            print("Aufwärtshalt Ebene 2")
            
        elif aufwärts > 2 and aufwärts <= 3:
            print("Aufwärtshalt Ebene 3")
            
        elif aufwärts > 3 and aufwärts <= 4:
            print("Aufwärtshalt Ebene 4")
Zuletzt geändert von AngelFilmnMusic am Freitag 18. November 2022, 20:28, insgesamt 4-mal geändert.
AngelFilmnMusic
User
Beiträge: 35
Registriert: Montag 3. Oktober 2022, 07:58

Bei Spyder sehe ich im variablen Explorer ja auch immer die Zwischenwerte, True und False etc. und habe schon x-Versuche durchgeführt und kontrolliert. Passt alles
Benutzeravatar
__blackjack__
User
Beiträge: 14069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@AngelFilmnMusic: Also meine Fragen sind damit nicht wirklich beantwortet. Denn auch wenn es 20 Etagen sind, werden die ja nicht wirklich sinnvoller wenn die Situation zwischen all diesen Etagen letztlich gleich sind. Und warum es okay anzunehmen, dass die Aufzüge ständig fahren und niemals irgendwo länger halten, aber auf der anderen Seite ein simples auswürfeln einer ganzen Zahl nicht genau genug an der Realität ist‽ Das sieht nach einer völlig unnötigen Verkomplizierung aus. Falls gleichverteilung zu ungenau ist, weil das oberste und das unterste Stockwerk nur halb so wahrscheinlich ist, weil das nur von einer Seite aus erreicht werden kann, liesse sich auch das mit ganzen Zahlen und ein bisschen Rechnen auswürfeln.

Wenn Du immer noch glaubst das man literale Vergleiche mit `True` und `False` braucht, dann solltest Du daran arbeiten. Das ist IMHO sowohl einfach, als auch ziemlich grundlegend das ohne diese Vergleiche zu machen.

So etwas wie ``abwärts >= 3 and abwärts < 4`` würde man eher mit Operatorverkettung so schreiben: ``3 <= abwärts < 4``. Beziehungsweise hier konkret ist das doch alles überflüssig, weil man das je nach Richtung wie das bereits gezeigt wurde mit `ceil()` und `floor()` ausrechnen kann, statt da Vergleiche für jede Etage zu schreiben.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
AngelFilmnMusic
User
Beiträge: 35
Registriert: Montag 3. Oktober 2022, 07:58

Ihr habt alle viel, viel mehr Erfahrung als ich und auch recht. Ich kann bzw. habe es nur so hinbekommen mit True und False. Funktioniert ja letztendlich auch, genau, wie ich es wollte. Und klar ist die allgemeine Zeit immer dieselbe. Wenn der Aufzug, keine Ahnung, 5 Sekunden pro Ebene braucht, kann man das genauso gut auch manuell berechnen, wie viel Zeit er dann von 1.5 bis 2 braucht oder von 1.3 bis 2. Im weiteren Ablauf wird es darum gehen Echtzeit-Messdaten zu übermitteln bzw. die Übermittlung zu simulieren, nächste Woche. Daher dieses ganze komplizierte Vorgehen.

- Wie viel Uhr hat die Brandmeldezentrale ausgelöst?
- Auf welcher Ebene war der Aufzug zu dem Zeitpunkt?
- Befand er sich in Fahrt? Wenn ja, in welche Richtung und wie lange hat er bis zur nächsten Ebene gebraucht? Wenn nein, auf welcher Ebene war er zu dem Zeitpunkt.

Das Problem ist ein ganz anderes: Wir haben den Unterricht ja nicht permanent. Wir haben beispielsweise jetzt einen drei Wochen Block. Dann haben wir drei Wochen Netzwerke einbinden, dann wieder was anderes. Python ist vorbei für uns. Was noch kommt, ist css, javascript und html, aber kein Python mehr bis zum Ende der Ausbildung. Und ich habe schon ein Pyhton Buch im Auge, was ich lesen möchte, damit ich mehr lerne. Dann werde ich bestimmt auch solche Codeeingaben, wie du (siehe unten) oder Sirius und Dennis und Co. gezeigt haben auch kennen mit der Zeit.
3 <= abwärts < 4
Feine Sache. Das wurde bis jetzt nicht gezeigt und wird es mit Sicherheit auch nicht mehr. Wir haben es nur mit "and" und "or" beigebracht bekommen
Benutzeravatar
__blackjack__
User
Beiträge: 14069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@AngelFilmnMusic: Kein Unterricht und kein Buch wird alles erklären was man braucht. Etwas was hier vorgeschlagen wird, nicht zu benutzen weil das noch nicht in einem Unterricht oder Buch vorkam ist eine komische Einstellung. Python als Sprache und die ganzen Module werden in der Python-Dokumentation beschrieben. Wenn man also etwas mit `math.ceil()` und `math.floor()` vorgeschlagen bekommt, muss man nicht auf Unterricht oder Bücher warten, sondern kann das sofort, direkt in der Python-Dokumentation zum `math`-Modul nachlesen.

Ich würde auch egal was sonst als Lernquelle(n) verwendet wird, empfehlen das Tutorial in der Python-Dokumentation mal durchzuarbeiten. Das ist immer aktuell zu der Python-Version für die die Dokumentation ist. Die Autoren davon kennen die Sprache wirklich gut. Die gezeigten Beispiele sind automatisiert getestet — sollte etwas davon nicht so funktionieren wie dargestellt, ist das ein Bug den man melden kann.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
AngelFilmnMusic
User
Beiträge: 35
Registriert: Montag 3. Oktober 2022, 07:58

Die Dokumentation werde ich mal im Dezember angehen, da haben wir zwei Wochen frei. Kann ich mich etwas besser darauf vertiefen. Heute werde ich auf jeden Fall diese "and" Verknüpfungen rausnehmen und so, wie du es gestern Abend geschrieben hast, ändern. Ich habe damals auch schon an dem einen Parkhaus alles abgeändert, was du damals meintest. Dieses Master mit PhotoImage rausgenommen und Canvas etc. Und noch weitere Dinge, die ich verstanden habe oder so, wie ich sie verstanden habe aus deinem Kommentar. Ich setze schon um, was mit hier geschrieben wird, aber immer in einer Ersatzdatei. Das habe ich mit dem ceil und floor auch schon gestern direkt. Es ist wirklich sehr hilfreich hier und ich bin jedem einzelnen wirklich dankbar
Sirius3
User
Beiträge: 18276
Registriert: Sonntag 21. Oktober 2012, 17:20

Es ist völlig egal, wie weit man mit Programmieren lernen ist, oder ob man nur Papier und Bleistift zur Verfügung hat:
Ein Auszug kann nicht gleichzeitig an zwei verschiedenen Orten sein, und das trotzdem in einer Simulation zu machen ist ein großer Fehler.
Meine Studenten bekommen mehr Punkte, wenn sie in Umgangssprache das Problem logisch korrekt lösen, als wenn sie zwar ein korrekt arbeitendes Pythonprogramm abliefern, das aber logisch nicht zum Problem passt.
AngelFilmnMusic
User
Beiträge: 35
Registriert: Montag 3. Oktober 2022, 07:58

Hallo @Sirius3,
Meine Studenten bekommen mehr Punkte, wenn sie in Umgangssprache das Problem logisch korrekt lösen, als wenn sie zwar ein korrekt arbeitendes Pythonprogramm abliefern, das aber logisch nicht zum Problem passt.
bei uns bekommen wir in Klausuren / Lernzielkontrollen nur vorgegebene Codes, weil es Multiple-Choice Aufgaben sind, die war am Computer lösen. Das hat für fast keinen (da sind wir alle einer Meinung) irgendeinen richtigen Lerneffekt bzw. es kann keiner zeigen, was er wie umsetzen würde, weil es halt keine "echten" Aufgabenstellungen sind. Wenn man schon eine Auswahl an Lösungen vorgegeben bekommt, ist es nicht wirklich schwer die richtige Lösung zu finden, selbst für diejenigen, die nicht mal aktiv am Unterricht teilnehmen. Und es hat auch keinen Mehrwert für die IHK Prüfungen später. Ist schon bitter.
Ein Auszug kann nicht gleichzeitig an zwei verschiedenen Orten sein, und das trotzdem in einer Simulation zu machen ist ein großer Fehler.
Was den Aufzug angeht. In der Ausgabe ist der Aufzug nicht gleichzeitig an zwei verschiedenen Orten, und das war ja mein Ziel, dass nur der Halt in eine Richtung angezeigt wird. Im Code ist er an zwei Positionen gleichzeitig, da hast du recht und das ist mir vollkommen bewusst. Aber relevant für mich oder für die Aufgabe ist ja, wie schon gesagt, die Ausgabe. Da wird nur eine Position angezeigt, welche dann aber als Zusatzbedingung abhängig von der Fahrtrichtung und von den Zwischenhöhen sein soll. Und das nur um irgendwelche Messwerte zu erhalten. Ansonsten waren ja eure Vorschläge erheblich einfacher und auch logischer, weil es ja tatsächlich nur relevant ist, in welche Richtung er fährt und dass er auf der nächsten Ebene, die kommt, hält.

Jetzt könnte man sagen, dass ich das von mir selbst aus dennoch besser oder korrekter lösen sollte zum Üben etc. Das mache ich auch, allerdings für Dinge, die nichts oder nur indirekt etwas mit dem Unterricht zu tun, weil die mir wesentlich mehr Spaß machen, weil es einfach etwas eigenes ist, wie die Parkhaus GUI damals zum Beispiel. Das war ja nur eine Matrix Aufgabe im Buch, die noch nicht mal programmiert werden sollte.
Antworten