verbesserungsvorschläge für mein schnick schnack schnuck.

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
jan.b
User
Beiträge: 195
Registriert: Mittwoch 9. August 2017, 17:12

HI, das da habe ich vor einiger zeit fertig gemacht. mir ist bewusst, dass die schleife am anfang sinnlos ist. muss trotzdem sein, da ich dieses spiel eigentlich über ein Programm aufrufe, dass ich zum Programmaufrufen programmiert habe, rauskopiert habe. wenn euch mängel struktureller Natur, unnötiges o.ä. auffällt, könnt ihr mir das gerne mitteilen. :D

Code: Alles auswählen

for i in range(1):
        import time
        import random
        runde = 1
        punkte = 0
        punktek = 0
        nutzloselückenstopfervariable = 0
        #time.sleep(1)
        print("1")
        time.sleep(1)
        print("2")
        time.sleep(1)
        print("3")
        print("los!:")
        time.sleep(0.5)
        print("schere,")
        time.sleep(0.5)
        print("stein,")
        time.sleep(0.5)
        print("papier")
        time.sleep(1.1)
        print("________________________________________________________")
        for x in range(int(input("wie oft möchtest du spielen?:"))):
                randomauswahl = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,15]
                random.shuffle(randomauswahl)
                schere = "schere"
                stein = "stein"
                papier = "papier"
                superliste = [schere, stein, papier, ]#anleitung
                if randomauswahl[7] <= 7:
                    nutzloselückenstopfervariable = nutzloselückenstopfervariable + 1
                else:
                    random.shuffle(superliste)
                schere = "schere"
                stein = "stein"
                papier = "papier"
                superliste = [schere, stein, papier, ]#anleitung
                ki = random.choice(superliste)
                print("das ist runde %s" % (runde))
                Input = input("Dein Zug.: ")
                spieler = Input
                #0 = schere
                #1 = stein
                #2 = papier
                print(ki)
                #p = punktedesspielers
                #k = punktederki
                #zuerst der spieler, dann die ki
                entscheidungsmöglichkeiten = ["punkt für ki", "punkt für dich"]
                if spieler == superliste[1] and ki == superliste[0]:#stein schere
                    print(entscheidungsmöglichkeiten[1])#spieler punkt
                    punkte = punkte + 0
                    punktek = punktek + 1
                    print("du hast %s punkte und tom hat %s punkte" % (punkte, punktek))
                elif spieler == superliste[0] and ki == superliste[2]:#schere papier
                    print(entscheidungsmöglichkeiten[1])#spieler punkt
                    punkte = punkte + 1
                    punktek = punktek + 0
                    print("du hast %s punkte und tom hat %s punkte" % (punkte, punktek))
                elif spieler == superliste[0] and ki == superliste[1]:#schere stein
                    print(entscheidungsmöglichkeiten[0])#ki punkt
                    punkte = punkte + 0
                    punktek = punktek + 1
                    print("du hast %s punkte und tom hat %s punkte" % (punkte, punktek))
                elif spieler == superliste[2] and ki == superliste[0]:#papier schere
                    print(entscheidungsmöglichkeiten[0])#ki punkt
                    punkte = punkte + 0
                    punktek = punktek + 1
                    print("du hast %s punkte und tom hat %s punkte" % (punkte, punktek))
                elif spieler == superliste[1] and ki == superliste[2]:#stein papier
                    print(entscheidungsmöglichkeiten[0])#ki punkt
                    punkte = punkte + 0
                    punktek = punktek + 1
                    print("du hast %s punkte und tom hat %s punkte" % (punkte, punktek))
                elif spieler == superliste[2] and ki == superliste[1]:#papier stein
                    print(entscheidungsmöglichkeiten[1])#spieler punkt
                    punkte = punkte + 1
                    punktek = punktek + 0
                    print("du hast %s punkte und tom hat %s punkte" % (punkte, punktek))
                elif spieler == superliste[2] and ki == superliste[1]:#papier stein
                    print(entscheidungsmöglichkeiten[1])#spieler punkt
                    punkte = punkte + 1
                    punktek = punktek + 0
                    print("du hast %s punkte und tom hat %s punkte" % (punkte, punktek))
                else:
                    spieler == ki
                    print("unentschieden")
                    punkte = punkte + 0
                    punktek = punktek + 0
                    print("du hast %s punkte und tom hat %s punkte" % (punkte, punktek))
                print("______________________________________________________________________")
                time.sleep(0.5)
                runde = runde + 1
                if punkte < punktek:
                    print("du hast verloren")
                elif punkte == punktek:
                    print("das ist ein unentschieden")
                else:
                    print("du hast gewonnen")
Benutzeravatar
pixewakb
User
Beiträge: 1405
Registriert: Sonntag 24. April 2011, 19:43

Ich fange einfach mal an: Importe gehören ganz an den Anfang, dringend modularisieren, d. h. packe die Logik in einzelne Funktionen, die dann von einer Haupt-Funktion (main()) aufgerufen werden. Wahrscheinlich ließe sich das kürzer und prägnanter formulieren.
Benutzeravatar
noisefloor
User
Beiträge: 3829
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das Spiel "Stein, Schere, Papier" wird auch im Thread viewtopic.php?f=1&t=41966 behandelt, der ist ca. 2 Wochen als. Im Post von Sirius3 gibt es auch eine saubere und kurze Implementierung: viewtopic.php?p=320297#p320297. Die kannst du als "Insperation" nehmen.

Gruß, noisefloor
jan.b
User
Beiträge: 195
Registriert: Mittwoch 9. August 2017, 17:12

ja wahrscheinlich :lol: . sieht aber wirklich verdammt cool aus mit dem ganzen zahlen und Buchstaben.
Benutzeravatar
/me
User
Beiträge: 3552
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

jan.b hat geschrieben:sieht aber wirklich verdammt cool aus mit dem ganzen zahlen und Buchstaben.
Meinst du deinen Code? Der sieht nicht cool aus, der sieht schlimm aus.
jan.b
User
Beiträge: 195
Registriert: Mittwoch 9. August 2017, 17:12

/me hat geschrieben:
jan.b hat geschrieben:sieht aber wirklich verdammt cool aus mit dem ganzen zahlen und Buchstaben.
Meinst du deinen Code? Der sieht nicht cool aus, der sieht schlimm aus.
für leute, die sowieso keine Ahnung haben, wie Programmierung funktioniert sieht Code immer cool aus. das kannst du nicht bestreiten. und jetzt bitte nicht sowas wie "du weißt ja selbst nicht mal wie das funktioniert". :lol: und nach der premisse gilt ebenfalls: je mehr desto komplizierter. je komplizierter desto beeindruckender. egal, ob nun sinnvoll oder nicht.
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

Selbst wenn jemand keinen Blassen vom Programmieren hat, wirst du ihn nicht beeindrucken, wenn er weiß was obiger "Code" tut.
When we say computer, we mean the electronic computer.
jan.b
User
Beiträge: 195
Registriert: Mittwoch 9. August 2017, 17:12

sls hat geschrieben:Selbst wenn jemand keinen Blassen vom Programmieren hat, wirst du ihn nicht beeindrucken, wenn er weiß was obiger "Code" tut.
da werden wir uns nicht einig.
Benutzeravatar
pixewakb
User
Beiträge: 1405
Registriert: Sonntag 24. April 2011, 19:43

Doch, da werden wir uns einig.

Es wird zwei Möglichkeiten geben: (1) Du schmeißt das Handtuch und widmest dich anderen Sachen, Schrauben am Roller oder Briefmarken-Sammlung oder etwas anderes oder (2) du machst es so, wie wir das empfehlen. Und bevor du jetzt den Zwergenaufstand probst: Auf unserer Seite ist der längere Hebel und wir haben Zeit.

Konkret: Du wirst so, wie du gerade programmierst, weitermachen, was total toll ist, weil es so schön undurchsichtig kompliziert ist. Irgendwann wirst du anfangen Sachen zu schreiben, die für dich nützlich sind und du entwickelst dich weiter und nimmst größere Projekte in Angriff und alles ist ganz wunderbar. Dann ändert sich die API eines Moduls oder ein Modul fällt weg oder die Struktur einer Website ändert sich, die du parst und dann gibt es zwei Möglichkeiten: Du fixt den Fehler, was bei Spaghetti-Code nach deiner Machart kaum geht, oder du verschiebst das Programm, in das du einiges an Zeit investiert hast, in den Papierkorb. Das geht dann so weiter. Du wirst dann entweder (1) nach und nach die Lust am Programmieren verlieren oder (2) dir Verfahren angewöhnen, die wir empfehlen und solche Routine-Arbeiten später ungemein vereinfachen. Also die Zeit spielt für uns und wir haben die Geduld und die innere Ruhe die Diskussion hier verloren zu geben und einfach abwarten zu können.

Etwas runter schreiben, kann fast jeder. Das so runter zu schreiben, dass man nach 3, 4, 6, 8 Monaten noch mal durchblicken kann, was man da runter geschrieben hat und an den Sachen noch (größere) Änderungen vornehmen zu können, das ist die Kunst und um das zu ermöglichen, gibt es über Jahrzehnte gereifte, erprobte und verbesserte Herangehensweisen.
jan.b
User
Beiträge: 195
Registriert: Mittwoch 9. August 2017, 17:12

pixewakb hat geschrieben:Doch, da werden wir uns einig.

Es wird zwei Möglichkeiten geben: (1) Du schmeißt das Handtuch und widmest dich anderen Sachen, Schrauben am Roller oder Briefmarken-Sammlung oder etwas anderes oder (2) du machst es so, wie wir das empfehlen. Und bevor du jetzt den Zwergenaufstand probst: Auf unserer Seite ist der längere Hebel und wir haben Zeit.

Konkret: Du wirst so, wie du gerade programmierst, weitermachen, was total toll ist, weil es so schön undurchsichtig kompliziert ist. Irgendwann wirst du anfangen Sachen zu schreiben, die für dich nützlich sind und du entwickelst dich weiter und nimmst größere Projekte in Angriff und alles ist ganz wunderbar. Dann ändert sich die API eines Moduls oder ein Modul fällt weg oder die Struktur einer Website ändert sich, die du parst und dann gibt es zwei Möglichkeiten: Du fixt den Fehler, was bei Spaghetti-Code nach deiner Machart kaum geht, oder du verschiebst das Programm, in das du einiges an Zeit investiert hast, in den Papierkorb. Das geht dann so weiter. Du wirst dann entweder (1) nach und nach die Lust am Programmieren verlieren oder (2) dir Verfahren angewöhnen, die wir empfehlen und solche Routine-Arbeiten später ungemein vereinfachen. Also die Zeit spielt für uns und wir haben die Geduld und die innere Ruhe die Diskussion hier verloren zu geben und einfach abwarten zu können.

Etwas runter schreiben, kann fast jeder. Das so runter zu schreiben, dass man nach 3, 4, 6, 8 Monaten noch mal durchblicken kann, was man da runter geschrieben hat und an den Sachen noch (größere) Änderungen vornehmen zu können, das ist die Kunst und um das zu ermöglichen, gibt es über Jahrzehnte gereifte, erprobte und verbesserte Herangehensweisen.
:lol: . ...zwergenaufstand. ich habe mir jetzt 2 tausendseitige python bücher gekauft. irgendwo habt ihr natürlich recht. aber das war ja nur zum spaß- also keine struktur erforderlich. wie dem auch sei. ich lese mich da noch mal ein bisschen ein. youtube videos kreuz und quer durch python ist vielleicht doch nicht die beste idee.
Benutzeravatar
pixewakb
User
Beiträge: 1405
Registriert: Sonntag 24. April 2011, 19:43

Ich mag Bibliotheken, weil man dort Sachen ausleihen kann. Bei den Büchern wirst du nicht die ganzen 1000 Seiten je Buch lesen müssen, weil gerade aufbauende Kapitel (z. B. GUI oder Web-Entwicklung) für Einsteiger erst einmal häufig nicht interessant sind. Ich hatte mir damals aber auch ein Buch gekauft.

Wenn du es ausleihen kannst, schau Dir mal "Weniger schlecht programmieren" von Passig und Jander an. Das Buch vermittelt keine Programmiersprache, aber erklärt viele Hintergründe und stellt Dinge, die du hier als Feedback bekommst, in einen sinnvollen Kontext.

Im Grunde geht es um die Wartbarkeit, d. h. grundlegende Konventionen einhalten: Importe nach oben, möglichst viel in Funktionen packen, die von einer main()-Funktion aufgerufen werden, und das Rad nicht neu erfinden wollen, so etwas halt.
Benutzeravatar
noisefloor
User
Beiträge: 3829
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
aber das war ja nur zum spaß- also keine struktur erforderlich.
Das ist schlichtweg falsch. Das ist Spaghetticode, der ist unlesbar, unwartbar, einfach schlecht. Da spielt es keine Rolle, ob du "zum Spaß" nur für dich oder für einen größere Menge an Leute programmierst.

Wenn der gezeigte Code dein Anspruch an das Niveau ist, den Code von dir haben soll, dann wirst du nie auch nur annähernd brauchbaren Code programmieren. Nicht in Python und auch in keiner anderen Sprache.

Gruß, noisefloor
jan.b
User
Beiträge: 195
Registriert: Mittwoch 9. August 2017, 17:12

noisefloor hat geschrieben:Hallo,
aber das war ja nur zum spaß- also keine struktur erforderlich.
Das ist schlichtweg falsch. Das ist Spaghetticode, der ist unlesbar, unwartbar, einfach schlecht. Da spielt es keine Rolle, ob du "zum Spaß" nur für dich oder für einen größere Menge an Leute programmierst.

Wenn der gezeigte Code dein Anspruch an das Niveau ist, den Code von dir haben soll, dann wirst du nie auch nur annähernd brauchbaren Code programmieren. Nicht in Python und auch in keiner anderen Sprache.

Gruß, noisefloor
das war nur ein test, ob ich das überhaupt hinbekomme. ich will mein schnick schnack schnuck ja nicht gleich im playstore anbieten.
jan.b
User
Beiträge: 195
Registriert: Mittwoch 9. August 2017, 17:12

pixewakb hat geschrieben:Wenn du es ausleihen kannst, schau Dir mal "Weniger schlecht programmieren" von Passig und Jander an. Das Buch vermittelt keine Programmiersprache, aber erklärt viele Hintergründe und stellt Dinge, die du hier als Feedback bekommst, in einen sinnvollen Kontext.
ich denke, dass es reichen müsste nochmal komplett von vorne anzufangen.
Antworten