1. #1
    Nachrichtendienst
    Avatar von Iomega
    Registriert seit
    11.02.2013
    Beiträge
    205
    Thanked 4 Times in 4 Posts

    Beitrag [Python] Zufallszahlen erraten

    Hey Leute,

    ich benötige mal ein wenig Hilfe.
    Ich bin derzeit in einer Weiterbildung wo wir Python lernen.
    Allerdings haben die meisten schon Vorkenntnisse und ich hänge als Neuling ziemlich hinterher, entsprechend ist es schwierig für mich, den Anfang zu finden.
    Nun soll ich jedenfalls etwas schreiben das eine Zahl zwischen 0 und 100 Random ausgesucht wird und man diese erraten muss. Entsprechend gibt er aus, ob man zu groß oder zu klein is, bis man die richtige Antwort hat.
    Vllt kann mir da der ein oder andere ein wenig helfen.
    Ich weiß nämlich nicht wo ich anfangen soll, ich weiß zwar das ich mit Loops arbeiten muss und eventuell Functions, but idk....
    Falls sich da jemand finden lässt, wäre ich tausendfach Dankbar.
    Was anderes kann ich auf die schnelle nicht bieten, da es derzeit nicht so locker sitzt..(Weihnachten halt).
    Danke euch für eure Aufmerksamkeit.

    Greetz

  2. #2
    U-Labs Plus-Mitglied

    Registriert seit
    06.11.2011
    Beiträge
    418
    Thanked 686 Times in 246 Posts

    Standard AW: [Python] Help

    Habe selbst vor Kurzem erst Python gelernt, weil ich es für meine Bachelor-Arbeit benötige. Habe mich früher davor gescheut, weil ich geglaubt habe es eh nie zu brauchen. Beherrsche inzwischen so viele Programmiersprachen, dass das eigentlich auch stimmt, aber schaden tut es mir ja jetzt auch nicht. Jede Programmiersprache hat seine Vorteile und manche Dinge lassen sich in Python sehr viel schneller und einfacher realisieren als in anderen Sprachen, insbesondere wenn es um Maschinelles Lernen geht. Python ist auch sehr beliebt wegen der großen Auswahl an Bibliotheken, u. a. NumPy. Was Python auch ausmacht ist die einfache Syntax und genau deshalb ist es auch so einfach zu erlernen (auch für jemanden, der wenig bis keine Erfahrung hat). Habe als erfahrener Programmierer nur einen Tag gebraucht, um alle Grundlagen sowie syntaktischen Zucker (sagt man so) zu erlernen, und einen Zweiten, um mich in die wichtigsten Bibliotheken einzuarbeiten. Aber auch ein Laie sollte in ein bis zwei Wochen fit sein was das Thema Python angeht.

    So viel erstmal zu Python...

    Zitat Zitat von Iomega Beitrag anzeigen
    Allerdings haben die meisten schon Vorkenntnisse und ich hänge als Neuling ziemlich hinterher, entsprechend ist es schwierig für mich, den Anfang zu finden.
    Das sollte nie eine Ausrede sein. Meiner Meinung nach gibt es hier kein Hinterherhängen, weil du dich nicht messen sollst, sondern es für dich selbst tust. Tutorials, die am Anfang, den du ja nicht findest , ansetzen, sollte es genug geben. Die Meisten setzen sogar genau da an.

    Zitat Zitat von Iomega Beitrag anzeigen
    Nun soll ich jedenfalls etwas schreiben das eine Zahl zwischen 0 und 100 Random ausgesucht wird und man diese erraten muss. Entsprechend gibt er aus, ob man zu groß oder zu klein is, bis man die richtige Antwort hat.
    - Zufallszahl generieren und in einer Variable speichern (https://pythonspot.com/zufallszahlen/).
    - Eingabe einlesen und in einer Variable speichern (https://www.python-kurs.eu/python3_eingabe.php).
    - Einfache Abfrage, ob die eingelesene Zahl kleiner, gleich oder größer der generierten Zahl ist und die entsprechende Ausgabe machen.

    Zitat Zitat von Iomega Beitrag anzeigen
    Ich weiß nämlich nicht wo ich anfangen soll, ich weiß zwar das ich mit Loops arbeiten muss und eventuell Functions, but idk....
    Da brauchst du weder Loops noch Funktionen und dauert auch keine zwei Minuten.

    Nicht persönlich nehmen, aber dein Ansatz zeigt mir, dass du dich noch gar nicht damit auseinandergesetzt hast. Wenn du einfach nichts tust, dann wird dir die wahrscheinlich einfachste Programmiersprache auch weiterhin schwer fallen zu erlernen.
    Ich könnte dir auch einfach den fertigen Code geben, aber das ist nicht Sinn und Zweck (wolltest du jetzt wahrscheinlich nicht hören, aber so ist).

  3. The Following 3 Users Say Thank You to Flav For This Useful Post:

    DMW007 (20.12.2018), Iomega (22.12.2018), Lacoste (20.12.2018)

  4. #3
    Nachrichtendienst
    Avatar von Iomega
    Registriert seit
    11.02.2013
    Beiträge
    205
    Thanked 4 Times in 4 Posts

    Standard AW: [Python] Help

    Danke.

    Naja ne Lösung wollte ich nicht und ausreden habe ich ebenfalls nicht.
    Ich bin einfach nur leicht überfordert, weil ich von Tag zu Tag viel neues Lerne und daher nicht weiß, wo ich nun anfangen soll.
    Normalerweise natürlich mit dem Zufalls generieren, Input etc. damit man etwas eingibt, worauf dann natürlich der Work etc. kommt, nur wir hatten das erst vor paar Tagen, dass dies mit schleifen und Funktionen gelöst wurde, nur genau dies macht es für mich kompliziert.
    Daher auch die Frage, wie der Ansatz nun wäre.
    Ich will das schon selber lösen, keine sorge, nur ich hatte auf einen oder generelle Tipps gehofft, mehr eigentlich auch nicht.

    Greetz

  5. #4
    U-Labs Plus-Mitglied
    Avatar von rVs14
    Registriert seit
    18.11.2011
    Beiträge
    984
    Thanked 513 Times in 338 Posts

    Standard AW: [Python] Help

    Hier wäre die kommentierte Lösung:
    import random;

    #Bestimmen einer Zahl (Integer) zwischen 1 und 100
    zahl = random.randint(1,100);

    #Ausgabe der Zufallszahl, auskommentieren wenn Testen beendet.
    print(zahl);

    #Nutzer nach Zahl fragen und in Variable einspeichern.
    eingabe = input("Bitte Zahl eingeben!");

    #So lange Zahl nicht der Eingabe entspricht, Schleife wiederholen. Auch möglich: while(true) schleife mit nachfolgender if Abfrage, allerdings nicht empfehlenswert
    #Achtung: Konvertierung der Variable nach Integer notwendig, falls etwas anderes als ein ganzzahliger Wert (Integer) eingegeben wird, kommt ein Fehler. Bei Bedarf vorher überprüfen (-> Methode: isinstance)
    while zahl != int(eingabe):
    #Wenn Zahl größer ist als Eingabe
    if zahl > int(eingabe):
    print("Zahl zu klein");
    else:
    #Wenn Zahl kleiner als Eingabe
    print("Zahl zu groß");

    #Aufforderung zur erneuten Eingabe der Zahl; Variable wird nach Eingabe überschrieben
    eingabe = input("Bitte neue Zahl eingeben!");


    #Sobald die Schleife verlassen wird (also richtiger Wert geraten wurde), "Erfolgreich!" ausgeben.
    print("Erfolgreich!");


    Hier ist der Code, eine einzelne Erklärung wäre mir nun zu aufwändig gewesen. Ich hoffe die Kommentare erklären dir ganz gut wieso und weshalb ich etwas gemacht habe. Falls du noch Fragen hast, immer her damit :-)

    Eventuell hilft dir auch ein Cheat-Sheet wie dieser um einen groben Überblich zu bekommen: https://perso.limsi.fr/pointal/_medi...n3-english.pdf
    Geändert von rVs14 (19.12.2018 um 17:49 Uhr)

  6. The Following 2 Users Say Thank You to rVs14 For This Useful Post:

    DMW007 (20.12.2018), Iomega (19.12.2018)

  7. #5
    Nachrichtendienst
    Avatar von Iomega
    Registriert seit
    11.02.2013
    Beiträge
    205
    Thanked 4 Times in 4 Posts

    Standard AW: [Python] Help

    Ich danke euch.
    Mein Aktueller Stand: Geschafft ...
    Hab mir natürlich Hilfe in Google gesucht und geschaut was mir geschrieben in Foren geantwortet wurde und mal geschaut wie deren Vorgehensweise war und an manchen ein beispiel (aber nicht abgeschrieben) genommen.
    Mittlerweile sieht es bei mir so aus (Kann nur nicht sagen, ob alles Ordnungsgemäß ist, aber es funktioniert und habe dafür etwas über ne Stunde gebraucht, da nebenbei noch gegooglet, Stream geschaut und Musik gehört habe:
    Code:
    import random
    z = random.randint (0,100)
    print(z)
    
    eingabe = input("Bitte gebe eine Zahl ein: ")
    
    z = int(z)
    
    try:
        val = int(eingabe)
        print("Super, nun wird gecheckt ob diese richtig ist...")
    except ValueError:
        print("Fehler, keine Zahl eingegeben, bitte versuche es erneut!")
        exit()
    
    while z != int(eingabe):
    
        if z > int(eingabe):
            print("Schade, diese ist zu klein!")
        else:
            print("Schade, diese ist zu Groß!")
    
        eingabe = input("Bitte versuche es erneut!")
    
    print("Volltreffer, du hast es Geschafft! :)");
    PS: Habe mir ebenso die Links gespeichert, diese haben mir auch ein wenig geholfen.
    Vielen Dank

    Greetz
    Geändert von Iomega (19.12.2018 um 22:11 Uhr)

  8. The Following User Says Thank You to Iomega For This Useful Post:

    DMW007 (20.12.2018)

  9. #6
    U-Labs Plus-Mitglied

    Registriert seit
    06.11.2011
    Beiträge
    418
    Thanked 686 Times in 246 Posts

    Standard AW: [Python] Help

    Das mit dem Eingabe wiederholen habe ich in meiner Eile überlesen. Dann stimmt das natürlich, dass du dafür eine Schleife brauchst. Alternativ geht es auch mit einer Funktion (Stichwort Rekursion).

    Zu deinem Ansatz:
    Sieht jetzt ziemlich genau so aus wie das von rVs14, nur Variablen umbenannt sowie Kommentare und ein paar Leerzeilen entfernt. Hier wurde nur noch das try ergänzt und das auch nur bei der Eingabe außerhalb der Schleife (warum dann nicht bei beiden?). Deshalb wollte ich keinen Code posten.

    Wie rVs14 schon kommentiert hatte, lässt sich die Eingabe mit isinstance überprüfen. Ist besser als try, was dann eine Exception auslöst.

  10. #7
    Projektleitung
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    4.005
    Thanked 8.301 Times in 2.480 Posts
    Blog Entries
    5

    Standard AW: [Python] Help

    Wenn man nicht weiß wo anfangen empfiehlt es sich, die Aufgabe bzw. das Problem in kleinere Teile zu zerlegen. Hier könnte man z.B. eine Zufallszahl generieren, dann die Eingabe auslesen, beides miteinander vergleichen und schlussendlich mittels Schleifen das Erraten ermöglichen. So kommt man Schrittweise dem Ergebnis näher und hat funktionierende Zwischenstände.

    Auch wenn es OT ist, aber: Eine Reizüberflutung mit Video-Streams, Musik & co sinnvoll ist, wenn man sich in ein komplett neues Thema einarbeitet, halte ich für nicht sinnvoll. Zumindest anfangs würde ich das lassen. Fällt dir dann sicher leichter, dich auf das Thema zu konzentrieren, wenn nicht ständig anderes Zeugs ablenkt. Hängt sicher auch vom jeweiligen Menschen ab. Aber da du ja Lernprobleme hast, würde ich darüber mal nachdenken. Programmieren ist nichts, was man nebenbei macht.

    Zum Code selbst:
    Code:
    z = int(z)
    Einsilbige Variablennamen sind nicht sprechend, bitte so was gar nicht erst angewöhnen. Auch wenn das teils selbst Berufsschullehrer und Uni-Professoren praktizieren. Spätestens in der professionellen Entwicklung (sprich größere Projekte/Teams) führt das zu Problemen, nicht nur wegen der Buchstaben, die irgendwann ausgehen. Das gleiche gilt übrigens für Thementitel auf U-Labs. Ich habe daher deinen Thread umbenannt.

    Die Umwandlung ist in dieser Zeile btw. unnötig, da randint() bereits einen Integer zurückliefert. Das kannst du in der Doku nachlesen oder auch selbst mit type() prüfen:
    Code:
    >>> type(random.randint(0,100))
    <class 'int'>
    In dem Try-Catch Block definierst du eine Variable für die Typunwaldung der Eingbe als Integer:
    Code:
    val = int(eingabe)
    Es ist eine gute Idee, Typunwaldungen in einer Variable zu speichern. Vor allem wenn diese an mehreren Stellen benötigt werden. Das macht den Code sauberer, weniger fehleranfällig und ist grundsätzlich auch performanter Allerdings sollte man diese Variable dann auch benutzen, was du leider nicht machst (wenige Zeilen weiter unten rufst du int(eingabe) zweimal erneut auf).

    Ansonsten solltest du auf konsistente Bezeichner achten, Denglisch ist nicht gut. Englisch macht imho am meisten Sinn. Das mag vielleicht pingelig klingen, ist es bei deinen 20 Zeilen auch. Aber da du ja was lernen willst (evtl. sogar im Bereich Softwareentwicklung) weise ich trotzdem mal darauf hin. Ich halte es für sinnvoll, sich diverse schlechte Praktiken gar nicht erst anzugewöhnen.


  11. The Following 2 Users Say Thank You to DMW007 For This Useful Post:

    Hase (02.01.2019), Iomega (22.12.2018)

  12. #8
    Nachrichtendienst
    Avatar von Iomega
    Registriert seit
    11.02.2013
    Beiträge
    205
    Thanked 4 Times in 4 Posts

    Standard AW: [Python] Help

    Zitat Zitat von Flav Beitrag anzeigen
    Das mit dem Eingabe wiederholen habe ich in meiner Eile überlesen. Dann stimmt das natürlich, dass du dafür eine Schleife brauchst. Alternativ geht es auch mit einer Funktion (Stichwort Rekursion).

    Zu deinem Ansatz:
    Sieht jetzt ziemlich genau so aus wie das von rVs14, nur Variablen umbenannt sowie Kommentare und ein paar Leerzeilen entfernt. Hier wurde nur noch das try ergänzt und das auch nur bei der Eingabe außerhalb der Schleife (warum dann nicht bei beiden?). Deshalb wollte ich keinen Code posten.

    Wie rVs14 schon kommentiert hatte, lässt sich die Eingabe mit isinstance überprüfen. Ist besser als try, was dann eine Exception auslöst.
    Mit der schleife war ich soweit zufrieden, ob es jetzte korrekt ist kann ich in nicht einmal 1 Woche lernen, nicht wirklich sagen.
    Selbst der Dozent meinte, dass man als Frischling, sich nicht so viel merken kann, wie wir Tag täglich neues Lernen, ohne in jeglicher Hinsicht Hilfe oder durcheinander zu kommen.
    Jedenfalls kann ich versichern, dass ich es selber geschrieben habe, sonst bringt es mir ja nichts.
    isinstance hatten wir bisher noch nicht, daher konnte ich nur die Standard Methoden anwenden, erst mit der Zeit wird es wichtig, alles Korrekt zu schreiben, nur da wir noch Anfänger sind und es darum geht es zu verstehen, ist es so Ok.
    Entsprechend ist es logisch das es ein wenig gleich aussieht.


    Zitat Zitat von DMW007 Beitrag anzeigen
    Wenn man nicht weiß wo anfangen empfiehlt es sich, die Aufgabe bzw. das Problem in kleinere Teile zu zerlegen. Hier könnte man z.B. eine Zufallszahl generieren, dann die Eingabe auslesen, beides miteinander vergleichen und schlussendlich mittels Schleifen das Erraten ermöglichen. So kommt man Schrittweise dem Ergebnis näher und hat funktionierende Zwischenstände.

    Auch wenn es OT ist, aber: Eine Reizüberflutung mit Video-Streams, Musik & co sinnvoll ist, wenn man sich in ein komplett neues Thema einarbeitet, halte ich für nicht sinnvoll. Zumindest anfangs würde ich das lassen. Fällt dir dann sicher leichter, dich auf das Thema zu konzentrieren, wenn nicht ständig anderes Zeugs ablenkt. Hängt sicher auch vom jeweiligen Menschen ab. Aber da du ja Lernprobleme hast, würde ich darüber mal nachdenken. Programmieren ist nichts, was man nebenbei macht.

    Zum Code selbst:
    Code:
    z = int(z)
    Einsilbige Variablennamen sind nicht sprechend, bitte so was gar nicht erst angewöhnen. Auch wenn das teils selbst Berufsschullehrer und Uni-Professoren praktizieren. Spätestens in der professionellen Entwicklung (sprich größere Projekte/Teams) führt das zu Problemen, nicht nur wegen der Buchstaben, die irgendwann ausgehen. Das gleiche gilt übrigens für Thementitel auf U-Labs. Ich habe daher deinen Thread umbenannt.

    Die Umwandlung ist in dieser Zeile btw. unnötig, da randint() bereits einen Integer zurückliefert. Das kannst du in der Doku nachlesen oder auch selbst mit type() prüfen:
    Code:
    >>> type(random.randint(0,100))
    <class 'int'>
    In dem Try-Catch Block definierst du eine Variable für die Typunwaldung der Eingbe als Integer:
    Code:
    val = int(eingabe)
    Es ist eine gute Idee, Typunwaldungen in einer Variable zu speichern. Vor allem wenn diese an mehreren Stellen benötigt werden. Das macht den Code sauberer, weniger fehleranfällig und ist grundsätzlich auch performanter Allerdings sollte man diese Variable dann auch benutzen, was du leider nicht machst (wenige Zeilen weiter unten rufst du int(eingabe) zweimal erneut auf).

    Ansonsten solltest du auf konsistente Bezeichner achten, Denglisch ist nicht gut. Englisch macht imho am meisten Sinn. Das mag vielleicht pingelig klingen, ist es bei deinen 20 Zeilen auch. Aber da du ja was lernen willst (evtl. sogar im Bereich Softwareentwicklung) weise ich trotzdem mal darauf hin. Ich halte es für sinnvoll, sich diverse schlechte Praktiken gar nicht erst anzugewöhnen.
    Danke erstmal für deine Ausführliche Hilfe.
    Ja, das wurde uns genauso auch Empfohlen, allerdings habe ich noch Schwierigkeiten mit dem zerlegen und daher hatte ich auch nach einem Tipp gefragt.
    Der Rest ist natürlich Korrekt.
    Da haste recht, gestern hatte es mir einfach nur geholfen, da es im Unterricht sehr ruhig ist, zudem ich ja die Webentwicklung schon hinter mir habe und recht gut damit klar gekommen bin, werde ich beim Programmieren bleiben.
    Nur da ich noch Ruby, Javascript lerne, ist es natürlich nicht nur nebensächlich .
    Ich hoffe und erwarte das es irgendwie schaffe, so wie die Webentwicklung .

    z = int(z) musste ich nur nutzen, weil "ohne" hat mir die cmd leider einen Fehler ausgegeben, dass es halt kein integer ist, wodurch ich damit dann gearbeitet habe.
    Normalerweise hätte man es auch direkt in der Eingabe einfügen können. Habe nämlich kp warum er es in der Zeile 2 nicht für den gesamten Code angenommen hat.


    Oh ok danke, dass ist mir nicht aufgefallen, war froh das es überhaupt geht xD...
    Ok super, danke für deine Tipps, werde versuchen diese auch direkt umzusetzen, vor allem das in "Englisch" schreiben, wird ja nur eine kleine Umgewöhnung .

    Jedenfalls Danke ich vielmals .

    Greetz
    Geändert von Iomega (20.12.2018 um 22:22 Uhr)

Ähnliche Themen

  1. Python, Literaturempfehlungen zum Einstieg?
    Von Equilibrum im Forum Andere
    Antworten: 2
    Letzter Beitrag: 13.06.2017, 16:39
  2. Typisierung von C# und Python
    Von DotNet im Forum .Net
    Antworten: 3
    Letzter Beitrag: 12.06.2017, 15:03
  3. Antworten: 4
    Letzter Beitrag: 27.11.2014, 22:36
  4. Google Streetview Spiel Ort erraten
    Von xOneDirectionx im Forum Internet und Technik
    Antworten: 1
    Letzter Beitrag: 08.06.2014, 23:30
  5. Antworten: 1
    Letzter Beitrag: 08.02.2014, 18:47
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150