Problem beim programmieren von Roboterauto

  • Quote

    Mit der Tastaturkombination ctrl + c funktioniert es. dann zeigt es auch die finally print befehle an.

    Vielen tausend Dank.

    Das ist sehr erfreulich. Wenn Du jetzt noch in der Stimmung bist, weiterzuarbeiten, sollest Du bitte ausprobieren, ob der Aufruf motor-anhalten() tatsächlich erforderlich ist oder ob es auch ohne geht.


    Nachbemerkung: Dass Du ein Ablaufprotokoll hergestellt und das Ergebnis mitgeteilt hast, hat mir sehr geholfen. Es wurde dadurch nämlich klar, dass die Finalisierung übergangen wurde, und das schafft man wirklcih nur mit dem kill-Signal.

    • Official Post

    Aber es läuft jetzt und ich möchte nicht dass sich das ändert

    Das Skript kannst Du ja archivieren und nicht mehr anfassen / benutzen. Ein zweites Skript erstellen und die 7 Zeilen Code reinkopieren und anpassen ist ja nun wirklich keine Arbeit.


    Übrigens hatte ich im Beitrag #99 noch einen Nachtrag mit Link geschrieben.

  • Boris-Gaertner Steuerung + Q ist kein Kill sondern X-ON und setzt die Übertragung zwischen Terminal und Host nach einem X-OFF (Steuerung + S) fort: https://de.wikipedia.org/wiki/…Protokoll_oder_X-ON/X-OFF


    Das ist die Tastenkombination die man kennen sollte wenn man in einem Terminal absichtlich oder versehentlich Steuerung + S gedrückt hat. Zum Beispiel weil man dachte ein anderes Fenster hätte den Fokus und man wollte beispielsweise in einem GUI-Programm mit Steuerung + S einen Speichervorgang auslösen.

    “If debugging is the process of removing software bugs, then programming must be the process of putting them in.” — Edsger Dijkstra

  • Das ist sehr erfreulich. Wenn Du jetzt noch in der Stimmung bist, weiterzuarbeiten, sollest Du bitte ausprobieren, ob der Aufruf motor-anhalten() tatsächlich erforderlich ist oder ob es auch ohne geht.

    Hatte noch keine Zeit aber ich werde mich in den nächsten Tagen mit dem Ergebnis melden.

    Nachbemerkung: Dass Du ein Ablaufprotokoll hergestellt und das Ergebnis mitgeteilt hast, hat mir sehr geholfen. Es wurde dadurch nämlich klar, dass die Finalisierung übergangen wurde, und das schafft man wirklcih nur mit dem kill-Signal.

    Es freut mich dass ich ausnahmsweise auch einmal jemandem helfen konnte und nicht nur ihr alle mir:).


    Übrigens hatte ich im Beitrag #99 noch einen Nachtrag mit Link geschrieben.

    Werde ich lesen und probiere es einmal aus.


    Ich wünsche euch allen ein schönes neues Jahr.


    Raspbifriend

    Die Hand voller Asse, doch das Leben spielt Schach.



    Erfolg besteht aus drei Buchstaben: Tun

    Goethe

  • Das ist sehr erfreulich. Wenn Du jetzt noch in der Stimmung bist, weiterzuarbeiten, sollest Du bitte ausprobieren, ob der Aufruf motor-anhalten() tatsächlich erforderlich ist oder ob es auch ohne geht.

    Guten Tag.

    Ich habe es getestet und es funktioniert auch ohne motor-anhalten().


    Ich habe schon sehr viel neues Dank euch allen in diesem Forum gelernt.

    Dafür kann ich nicht genug danken.


    Raspbifriend

    Die Hand voller Asse, doch das Leben spielt Schach.



    Erfolg besteht aus drei Buchstaben: Tun

    Goethe

  • Hallo zusammen.

    Mal wieder....

    Ich hoffe ihr seit motiviert um mir mal wieder aus der Patsche zu helfen.

    Ich will das mein Auto wenn es zu nahe an ein Hindernis kommt, sich per Zufallsprinzip entweder nach Links oder nach Rechts dreht. Und das eine halbe Sekunde lang. Ich arbeite mit random choice und habe hinter dem randombefehl ein Print hinzugefügt welches geprintet werden soll nachdem es nach Links oder Rechts gedreht hat. Es wird angezeigt aber er dreht sich nicht nach Links oder Rechts. Aber es kommt auch keine Fehlermeldung wegen dem Random Befehl.

    Ich habe mein erstes "Teilziel" erreicht und baue den Code nun weiter aus und dieser Teil ist meiner Meinung nach wichtig, damit das Fahrzeug autonom ohne Crash herumfahren kann.

    hyle :

    Ich habe es noch nicht in Robot geschrieben weil ich zuerst das zweite Teilziel erfolgreich abschliessen will.


    Das wäre der Code:


    Könnt ihr mir helfen?


    Ich wäre euch sehr dankbar.


    Raspbifriend

    Die Hand voller Asse, doch das Leben spielt Schach.



    Erfolg besteht aus drei Buchstaben: Tun

    Goethe

  • Habe zwar noch nicht mit random gearbeitet , aber was soll


    Code
    random.choise([1, 2])

    bewirken ?

    Wofür steht das 1, 2 ?

    Warum schreibst du nicht

    Code
    random.choise([motor_right, motor_left]) 

    wenn es nach rechts oder links gehen soll?

  • Der Aufruf random.choice([1, 2]) liefert einen Wert, und zwar immer etweder eine 1 oder eine 2. In dem gezeigten Code wird dieser Wert aber nicht verwendet, sondern sogleich "weggeworfen". Die Verwendung eines Wertes kann so geschehen:

    Python
        zufallswert = random.choice([1, 2])
        if zufallswert == 1:
            pass #  hier statt pass eine Aktion
        else:
            pass  # hier statt  pass eine Aktion

    Auf die Hilfsvariable zufallswert kann verzichtet werden, wenn geschrieben wird:


    Python
        if random.choice([1, 2]) == 1:
            pass
        else:
            pass

    Ich schlage versuchsweise folgendes vor:

    Python
        if random.choice([1, 2]) == 1:
            motor_left()
        else:
            motor_right()


    Schlussfolgerung: Es genügt nicht, einen Zufallswert zu erzeugen. man muss ihn auch kreativ nutzen.


    Nebenbemerkung: pass ist ein Schlüsselwort, das eine Anweisung ersetzt. Man schreibt es immer hin, wenn man eine Anweisung hinschreiben muss, aber noch nicht weiß, welche. Sobald man sich dann überlegt hat, was man eigentlich will, ersetzt man das pass durch das, was man sich überlegt hat.



    Nach dem Aufruf time.sleep(0.5) ist dann natürlich motor_stop() zu schreiben, damit die Drehung wieder aufhört.

  • Ich kann der Versuchung nicht widerstehen, den Beitrag #107 ein zweites Mal zu beantworten, allerdings mit einer Tricklösung, von der ich weiß, dass sie nicht völlig naheliegend ist. Sie illustriert aber die Möglichkeiten von Python.


    ES ist möglich, zu schreiben:


    Python
        random.choice([motor_right, motor_left]) ()

    Das muss jetzt aber sorgfältig erklärt werden:

    • Das Aufrufargument von random.choice ist jetzt eine Liste, die die Namen von zwei im Programm definierten Funktionen enthält. Beachte, dass den Funktionsnamen hier keine Klammern folgen; die Funktionen werden also nicht aufgerufen. Das ist wichtig!
    • Wenn der Aufruf von random.choice ausgeführt wird, erhalten wir als Ergebnis eine der beiden in der Liste genannten Funktionen - wir wissen nur nicht, welche.
    • random.choice([motor_right, motor_left]) ist jetzt also ersetzt zu denken durch eine der Funktionen motor_right, motor_left. Jetzt kommt der Trick: Das nachgestellte Klammernpaar () bewirkt den Aufruf der Funktion, die durch die Zufallsfunktion ausgewählt wurde. Das ist aber wirklich ein Trick, und zwar einer für Personen, die in Python schon recht gut drin sind.
    • Immerhin ersparen wir mit diesem Trick eine mit if und else ausprogrammierte Fallunterscheidung.

    Edited once, last by Boris-Gaertner: Ergänzung zum ersten Spiegelstrich der Erklärungen. ().

  • Vielen Dank für die raschen Rückmeldungen.


    So funktioniert das also...


    Ich werde mich an die kürzere Variante.

    Vielen Dank für die ausführliche Erklärung.

    Ich hoffe dass es funktionieren wird.

    Langsam geht mir das Kopieren auf den Geist.

    Ich habe den ganzen Code kopiert und bekomme das wesentliche nicht hier rauf:wallbash:.

    Ich habe zwei Variabeln erzeugt.

    Nähmlich so:

    Code
    1 == motor_left()
    2 == motor_right()

    Warum es nicht mitgekommen ist; keine Ahnung.


    Raspbifriend

    Die Hand voller Asse, doch das Leben spielt Schach.



    Erfolg besteht aus drei Buchstaben: Tun

    Goethe

    Edited once, last by Tundrameise ().

  • Die Funktion random.choice wird verwendet, um eine zufällige Auswahl aus einer Aufzählung von Dingen zu erhalten. Dabei entscheidet der Programmierer selbst, aus was für Dingen er auswählen will. Das macht die Auswahl sehr vielseitig; kann aber auch zu Verständnisproblemen führen. Fangen wir ganz einfach an (zunächst ohne direkten Bezug zum Roboterauto):

    Python
        zufallswert = random.choice(["Kopf", "Zahl"])

    Hier wird aus den Zeichenreihen "Kopf", "Zahl" eine zufällig gewählt. Die Auswahl ist auch das Ergebnis des Funktionsaufrufs. Wenn Du die gezeigte Anweisung in einer Schleife 10 mal ausführst, hast du gute Chancen, "kopf" und "Zahl" ungefähr gleich oft zu erhalten. Gleiche Häufigkeit (5 zu 5) ist aber nicht garantiert.

    Dieses Beispiel ist natürlich das bekannte Münzenwerfen - eben nach Python übersetzt.


    Ein anderes bekanntes Zufallsspiel - das Knobeln - kann man so schreiben:

    Python
       zufallswert = random.choice(["Stein", "Schere", "Papier"])


    Wenn schon von Spielen die Rede ist, in denen der Zufall eine Rolle spielt, darf natürlich der für Brettspiele unentbehrliche Würfel nicht fehlen. Hier ist er:

    Code
       zufallswert = random.choice([1, 2, 3, 4, 5, 6])

    Hier wählt die Funktion random.choice aus den Zahlen von 1 bis 6 eine zufällig aus; jede Ausführung des Ausdrucks liefert hier eine Zahl. Das ist ein Unterschied zu den beiden anderen Beispielen, bei denen das Ergebnis der Auswahl eine Zeichenreihe war.


    Die schon mehrfach erörterte Anweisung

    Python
        random.choice([1, 2])

    liefert eine der Zahlen 1, 2 in zufälliger Auswahl. Man könnte sagen, dass hier die Beispiele "Würfel" und "Kopf oder Zahl" kombiniert sind: Vom Würfelbeispiel kommt die Verwendung von Zahlen, vom Kopf-Zahl-Beispiel die Auswahl zwischen nur zwei Werten.


    In

    Code
       random.choice([motor_left, motor_right])

    wird eine von zwei im Programm vereinbarten Funktionen zufällig ausgewählt - das ist Python für Fortgeschrittene. Es ist vielleicht besser, wenn Du dich zunächst an den Vorschlag im Beitrag #109 hältst, also eine der Zahlen 1, 2 zufällig ziehst und in einer mit if und else programmierten Fallunterscheidung entscheidest, welcher Motor nun eine Drehbewegung verursachen soll.


    Zu der letzten Frage:

    Code
    1 == motor_left()
    2 == motor_right()

    Das sind zwei Vergleichsanweisungen:

    In der ersten Zeile wird geprüft, ob das Ergebnis des Aufrufs motor_left() der Zahl 1 gleich ist; das Ergebnis des Vergleichs wird aber weder genutzt noch gespeichert, sondern einfach weggeworfen.

    In gleicher Weise wird in der zweiten Zeile geprüft, ob das Ergebnis des Aufrifs motor_right() der Zahl 2 gleich ist; das Ergebnis des Vergleichs wird ebenfalls weggeworfen.


    Diese beiden Anweisungen machen also überhaupt nicht das, was Du wohl erwartet hast. Dass Du trotzdem keine Fehlermeldungen von Python bekommst, liegt daran, dass beide Anweisungen fehlerfrei sind - bloss eben etwas ganz anderes machen als Du erwartest. Wenn dieser Effekt auftritt - und er tritt in Python oft auf - hat man ein Problem: Wenn Anweisungen, die nicht das Erwartete tun, nach den Regeln der Programmiersprache fehlerfrei sind, gibt es von Seiten der Programmiersprache keinerlei Hilfe bei der Fehlersuche. Man muss dann selbst herausfinden, was falsch gelaufen ist.


    Hier wurden keine Variablen erzeugt! Wenn Du Variablen erzeugen willst, musst Du daran denken, dass eine Variable mit einem Buchstaben beginnt. Also so:


    Code
    variable1 = motor_left()

    Beachte hier auch, dass die Wertzuweisung an eine Variable mit einem Gleichheitszeichen zu schreiben ist; zwei aufeinanderfolgende Gleichheitszeichen bewirken einen Test auf Gleichheit und liefern einen logischen Wert als Ergebnis.

  • Nur mal so als Info für alle die es noch nicht gemerkt haben: Im Original stand `random.choise(…)` — das hätte zu einem AttributeError geführt. Der TE behauptete einfach nur das wäre so gelaufen und das Auto hätte nur nicht nach links oder rechts gelenkt.


    Vom TE kommt absolut keine Eigenleistung, immer nur geratenes und versuche Code aus Antworten *irgendwie* in ”seinen” Code zu kopieren (der ist ja gar nicht vom TE) ohne auch nur die Grundlagen von Python verstanden zu haben.


    Unterm Strich bettelt der sich hier zeilenweise Code für eine Hausaufgabe zusammen, und das nicht mal ansatzweise mit dem Anspruch dabei auch etwas zu lernen.

    “If debugging is the process of removing software bugs, then programming must be the process of putting them in.” — Edsger Dijkstra

  • Ich habe mich hier nicht geäußert, da ich von Python etwa soviel weiß die wie Kuh vom Dachdecken.

    Aber die ganze Zeit (ich verfolge den Thread von Beginn an) hat sich mir eine Frage aufgedrängt:

    Was passiert, wenn der TE "seine" Arbeit abgibt und er dann in einem Colloquium oder sonstiger persönlicher Zusammenkunft mit dem "Auftraggeber" den Code bzw. die Lösungserarbeitung begründen muss?


    Spätestens dann wird das in die Hose gehen.

    Sorry, wenn ich das so deutlich ausspreche, aber ICH hätte einen Riesenbammel davor.


    Gruss

  • Hallo FCS830,

    wir hatten im Studium auch so einen Kandidaten. Der ist in einem Praktikum durchgefallen, bei dem alle Assistenten und Chef-Assistenten sehr bemüht waren, zu pampern und zu unterstützen. Ergebnis: NOCH NIE war da jemand durchgefallen. Anwesenheit wurde belohnt. Guter Wille wurde belohnt. Wenn man niemanden zusammengeschlagen hat oder sonstwie negativ auffiel, war das schon so gut wie den Schein in der Tasche zu haben.


    Dann kam ER (Name zum Glück vergessen).


    Er war auch immer dabei. Sein Kollege hat in den vorbereitenden Gesprächen mit dem Assistenten die Verständnisfragen beantwortet. Ob ER was verstanden hat und was er verstanden hat, blieb unklar.


    Dann wurden die Experimente aufgebaut und durchgeführt. ER stand nur daneben. Was gut war, er fasste auch nichts an - konnte also nichts kaputt machen. War aber auch nicht gut, denn nur "durch Anfassen kann man auch Begreifen lernen".


    Die Auswertung der Messwerte und Ziehen von Schlussfolgerungen sollten gemeinsam erfolgen. SEIN Anteil an den gemeinschaftlichen Protokollen beschränkte sich darauf, diese mal in Händen gehalten zu haben, bevor sie abgegeben wurden. Protokolle, der ER dann mal alleine vorbereiten sollte, hat er am Tag der Abgabe zu Hause vergessen (sagt er). Sein Kollege musste dann auf die Schnelle was aus dem Ärmel schütteln. Sein Kollege hat viel dabei gelernt.

    In den abschließenden Kolloquien beim Chef-Assistenten war ER auch anwesend. Ließ aber auch durchblicken, dass sein Anteil an dem gemeinsamen Werk doch eher bei 0 als bei 1% lag.


    Als es dann dem Semester an den Kragen ging, kam so eine eigentümliche Stimmung auf, ob jemandem der Schein überreicht werden solle, der ein so passives Verhalten an den Tag legte, dass man sich des Eindruckes nicht erwehren konnte, dass da eine Portion Desinteresse ursächlich sein könne.


    Also hat man IHN dann etwas intensiver beäugt. Als dann so gar nicht erkennbar war, dass ER irgendwas neues an Erkenntnissen hat gewinnen wollen, kamen Überlegen auf, IHN durch Übergabe eines Scheines überhaupt doch noch belohnen zu dürfen.


    Die Assistenten und der Chef-Assistent und dann auch der Prof. überlegten intensiv, ob man ein Exempel statuieren solle. Für und Wider wurden ausgetauscht. Die Chancen standen lange Zeit ganz gut, dass ER doch den Schein "gewinnen" würde.


    Im letzten Kolloqium beim Chef-Assistenten war dann auch der Prof. anwesend - ein Didakt der Extraklasse (meine ich ehrlich so!).


    So sehr sich der Chef-Assistent auch bemühte, irgend etwas reflektiertes von IHM zu erhaschen, so sehr wurden die Bemühungen mit NIX belohnt.


    Am Ende dann drohte dann die Entscheidung "Schein hin" oder "Schein her".


    Nachdem sich der Prof. das Trauerspiel zu lange hat ansehen müssen, sprach er dann das Machtwort: "Durchgefallen. Semester wiederholen! BASTA!!!".


    Daraufhin ergriff ER das Wort. Zum ersten Mal in dem Semester engagiert. Erstaunlich war das schon - aber immerhin tat er SEINEN Mund auf!


    ER zeigte sein vollkommenes Unverständnis, warum ausgerechnet ER als Erster hier durchfallen solle. Er habe doch immer "daneben gestanden".

    Dann platzte dem Didakt der Extraklasse für seine Verhältnisse der Kragen. "Sie sagen es: Sie haben die ganze Zeit nur daneben gestanden. Nichts vorbereitet. Nichts angefasst. Nichts mitgemacht. Nichts ausgewertet. Nichts beantwortet. Nichts verstanden. Nichts geleistet."


    ER verstummte. Zog von dannen. Ward nicht mehr gesehen.


    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo __blackjack__,


    Nur mal so als Info für alle die es noch nicht gemerkt haben: Im Original stand `random.choise(…)` — das hätte zu einem AttributeError geführt. Der TE behauptete einfach nur das wäre so gelaufen und das Auto hätte nur nicht nach links oder rechts gelenkt.


    Vom TE kommt absolut keine Eigenleistung, immer nur geratenes und versuche Code aus Antworten *irgendwie* in ”seinen” Code zu kopieren (der ist ja gar nicht vom TE) ohne auch nur die Grundlagen von Python verstanden zu haben.


    Unterm Strich bettelt der sich hier zeilenweise Code für eine Hausaufgabe zusammen, und das nicht mal ansatzweise mit dem Anspruch dabei auch etwas zu lernen.

    das mit dem "choise" und "choice" scheint seit #22 in diesem Thread der running Gag zu sein.


    Kann man mögen - muss man aber nicht.



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Andreas: die geschichte von "IHM" kommt mir sehr bekannt vor ;).

    OT: Erinnert mich an einen alten Witz:

    Kommt der Student ins Examen, sagt der Prof: "Sagen Sie mal, kenne ich Sie nicht?" Der Student "Ja, ich war letztes jahr schon hier, bin aber leider durchgefallen."

    Prof.: "Das tut mir leid. Wie lautete denn damals meine erste Frage an Sie?"

    Student: "Sagen Sie mal, kenne ich Sie nicht?" :P


    Gruss

  • Das sind zwei Vergleichsanweisungen:

    In der ersten Zeile wird geprüft, ob das Ergebnis des Aufrufs motor_left() der Zahl 1 gleich ist; das Ergebnis des Vergleichs wird aber weder genutzt noch gespeichert, sondern einfach weggeworfen.

    In gleicher Weise wird in der zweiten Zeile geprüft, ob das Ergebnis des Aufrifs motor_right() der Zahl 2 gleich ist; das Ergebnis des Vergleichs wird ebenfalls weggeworfen.

    Ich denke das war der Grund weshalb am Anfang des Programms Links und Rechts stand und sich das Auto einmal im Kreis drehte und dann das Programm ausführte:wallbash:.


    Sorry, wenn ich das so deutlich ausspreche, aber ICH hätte einen Riesenbammel davor.

    Jetzt wo du es erwähnst...

    Vom TE kommt absolut keine Eigenleistung, immer nur geratenes und versuche Code aus Antworten *irgendwie* in ”seinen” Code zu kopieren (der ist ja gar nicht vom TE) ohne auch nur die Grundlagen von Python verstanden zu haben.


    Unterm Strich bettelt der sich hier zeilenweise Code für eine Hausaufgabe zusammen, und das nicht mal ansatzweise mit dem Anspruch dabei auch etwas zu lernen.

    Da hast du recht. Aber auch wenn es nicht so aussieht lerne ich durch eure Antworten sehr viel. Ich muss es auch anders wo manchmal einfach von jemandem ausführlich erklärt bekommen und z. B auch schon vorgefertigten Code bekommen. Ich verstehe es erst Dann. Darum ein grosses :danke_ATDE: an alle in diesem Thread.


    Dann wurden die Experimente aufgebaut und durchgeführt. ER stand nur daneben. Was gut war, er fasste auch nichts an - konnte also nichts kaputt machen. War aber auch nicht gut, denn nur "durch Anfassen kann man auch Begreifen lernen".

    Ich habe mein Auto aufgebaut und tüftle auch immer daran herum und nach jeder Änderung lasse ich es fahren. Ich verstehe dann bei random choice zum Beispiel nicht warum es nicht läuft obwohl ich es wie auf der Website beschrieben gemacht habe.


    Was passiert, wenn der TE "seine" Arbeit abgibt und er dann in einem Colloquium oder sonstiger persönlicher Zusammenkunft mit dem "Auftraggeber" den Code bzw. die Lösungserarbeitung begründen muss?

    Zu meinem Glück ist es erstens eine Arbeit in der Schule wo die Lehrer einfach wissen wollen ob wir im Stande sind ein Projekt selber ausführen können (also zeitmanagment, Journal schreiben, schriftliche Arbeit machen und ob unser Projekt funktioniert und ob es unseren Zielen entspricht.) und zweitens kann keiner der Lehrer an meiner Oberstufe programmieren. Also die checken warscheinlich vom ganzen Programmieren noch weniger als die Kuh vom Dachdecken. Die sind schon Stolz wenn mein Auto zuverlässig durch die Gegend fährt. Aber es ist sicher nicht die beste Methode wie ich das Programmieren angehe, aber ich möchte von euch lernen und nicht von Büchern, weil ich es bei euch besser verstehe und man Büchern auch keine Fragen stellen kann. Und wenn es antworten würde, wäre ich warscheinlich nicht mehr ganz dicht.

    Ich danke euch dass ihr trotzdem dass ich euch seit November auf die Nerven gehe, für eure Anregungen, Rückmeldungen, Tipps und auch für allgemeine Bemerkungen.


    Darum danke an alle die mir hier helfen.


    Ich weiss das sind keine guten Gründe, aber die Bücher in der Bibliothek sind ausgebucht und ich kann leider mehr schlecht als recht Englisch.


    Auch wenn es aussieht als würde ich euch einfach alles abschreiben ohne es zu checken. Ausserdem geht es mir selber auf den Geist dass ich mir nicht selber helfen kann und aus meiner Familie niemand programmieren kann ausser vielleicht Python Turtle.


    Raspbifriend

    Die Hand voller Asse, doch das Leben spielt Schach.



    Erfolg besteht aus drei Buchstaben: Tun

    Goethe

    Edited 5 times, last by Tundrameise: Noch neue Gründe hinzugefügt. ().

  • Sì, es funktioniert prächtig. Vielen Dank für die ausführliche Erklärung des Random Choice.


    Quote


    Nach dem Aufruf time.sleep(0.5) ist dann natürlich motor_stop() zu schreiben, damit die Drehung wieder aufhört.

    Dieses Motor_stop() ist zu viel. Dann dreht er sich gar nicht mehr. Sobald er wieder ausser Reichweite ist, fährt er selber wieder vorwärts.

    wir hatten im Studium auch so einen Kandidaten.

    Ich verstehe dich voll und ganz dass du dich nervst. Ich nerve mich auch ab solchen Typen. Ich versuche mich zu bessern. Ich möchte nicht auch so enden.


    Bitte habt Nachsicht mit mir. Ich lerne immer mehr dazu. Ich dachte am Anfang nicht dass ein Roboterauto zu Programmieren so viel anderer Code braucht als Motor_gradeaus, left, right und zurück.

    Die Hand voller Asse, doch das Leben spielt Schach.



    Erfolg besteht aus drei Buchstaben: Tun

    Goethe

    Edited once, last by Tundrameise ().