Coding?
Was bedeutet/macht dieser Code?
5 Antworten
Steht doch da.
Solange das eingegebene Kommando nicht "quit" ist, läuft die Abfrage.
Bei Eingabe von start wird "Car starts" ausgegeben.
Bei Enigabe von stop wird "car stopped" ausgegeben.
Bei help erscheint die Hilfe.
Alle anderen Eingaben landen im else unten.
Moin. Das ist Python.
Der Code den du da hast, der läuft ganz oft durch und lässt den User was eingeben.
- Wenn der User "start" eingibt, wird Car starts angezeigt.
- Wenn der User "stop" eingibt, wird car stopped angezeigt.
- Wenn der User "help" eingibt, wird ein Hilfetext angezeigt
- Wenn der User "quit" eingibt, endet das Program.
- Wenn der User was anderes gibt, wird ihm "Sorry we dont underatand." angezeigt.
Es ist außerdem Anfängercode und auch das Programm, eines Anfängers. Falls es deiner ist, mach dir keine Sorgen, man lernt alles mit der Zeit. Anfänger sein ist nichts schlimmes, es ist ein Prozess.
Und die While Schleife ist auch mal ein anderer Ansatz.
Wieder so eine basic Frage... Na gut, lass es mich mal in RICHTIGE Sprache übersetzen, damit du siehst was da eigentlich passiert:
section .data
prompt db "> ", 0
start_msg db "Car starts.", 0xA, 0
stop_msg db "Car stopped.", 0xA, 0
help_msg db "start - to start the car.", 0xA
db "stop - to stop the car.", 0xA
db "quit - quit the game.", 0xA, 0
error_msg db "Sorry we dont understand.", 0xA, 0
section .text
global _start
_start:
; Initialisiere command buffer
xor ebx, ebx ; command = ""
command_loop:
; Vergleiche mit "quit"
cmp ebx, 'quit'
je exit_program
; Input handling
mov eax, prompt
call print_string
call read_input
call to_lowercase
; Command parsing
cmp eax, 'start'
je do_start
cmp eax, 'stop'
je do_stop
cmp eax, 'help'
je do_help
; Default case
mov eax, error_msg
call print_string
jmp command_loop
Was du da siehst ist eigentlich ein simpler State Machine Handler in Python (🤮), der basicly nur Input parsed und responded. Quasi ein glorifizierter Echo-Server ohne Socket-Layer.
Der interessante Part ist die Command Chain Resolution über Sequential String Matching - in Assembly hätte man das VIEL eleganter mit einem Jump Table lösen können, aber hey, ist Python né? 🤷♂️
Der While-Loop implementiert einen Basic Command Processor der vier States supported:
- START
- STOP
- HELP
- ERROR (default handler)
Warum man sowas in Python schreibt anstatt gleich proper lowlevel C ist mir schleierhaft...
Die String Comparison Chain ist auch mega ineffizient - bei mehr als 3-4 Commands würd ich da minimum ein Binary Search Tree implementieren, besser noch ne Hash Table mit O(1) Lookup.
Tja, back in my days™ haben wir sowas noch RICHTIG gelernt - mit proper Memory Management und allem drum und dran!
/rant
Hoffe das hat dir bisschen die Augen geöffnet was ECHTES Programming ist! 😉
~Dr. Hart
Je nachdem, was du eingibst, kommt eine andere Ausgabe heraus. Was man eingeben kann und was dabei raus kommen würde, ist leicht zu erkennen, auch ohne programmierkenntnisse.
Z.b. die Eingabe "start" fürt zur Ausgabe "Car starts"
Das Programm läuf solange, bis "quit" eingegeben wurde
Ich sehe gerade - da ist sogar ein Programmierfehler drin.
Wenn man quit eingibt, sagt es dir erst noch, dass es die Eingabe nicht verstanden hat, bevor es sich beendet.
Der Code in dem while Block wird ausgeführt, bis man "quit" eingibt.
- Der Code in diesem Block nutzt die input Funktion damit man einen Text eingeben kann, das pausiert das Programm auch erst mal.
- Danach wird geschaut was eingegeben wurde, start, stop, help oder etwas anderes und ein passender Text ausgegeben.
- Das Programm springt dann wieder zu dem command != "quit", wenn man aber quit eingegeben hat, wird dieser Block übersprungen und das Programm ist am Ende angekommen.
Etwas dämlich ist, dass in Schritt zwei nicht der Fall behandelt wird, dass man quit eingibt, das Programm gibt dann den Text aus, dass es nicht versteht was der Nutzer will, beendet sich aber trotzdem. Naja.
Sry bin neu in python Aber wo gebe ich die eingabe start ein?