Brauche dringend Inspiration

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
Julia Chevalier
User
Beiträge: 2
Registriert: Freitag 12. Juni 2020, 16:05

Hey ich bin Julia und ich programmiere seid kurzen mit Python. Ich hab einen code geschrieben und wollte fragen ob jemand Idee hat wie ich ihn erweitern und verbessern kann, einfach um mir inspiration zu geben.
Vielen Dank schonmal :)


Mein Code:
class SchereSteinPapierEchseSpock:
pass

import random
from time import sleep

print("")
print("")
print("Willkommen bei der Schere, Stein, Papier, Echse, Spock Europa Meisterschaft 2020.")
sleep(3)
print("")

class Spieler:
pass
print("")
print("")
print("Als erstes losen wir deinen Gegner aus.")
sleep(2)
print("loading...")
sleep(3)
print("Du spielst in der ersten Runde gegen:")
print("")
from random import randint
Name_Liste = ["Name: Noah", "Name: Mia", "Name: Luka", "Name: Eva", "Name: Hugo", "Name: Lucia", "Name: Jakub", "Name: Eliska", "Name: Yusuf", "Name: Elif", "Name: Danylo", "Name: Angelina", "Name: Bence", "Name: Hanna", "Oliver", "Name: Amelia", "Name: Elsa", "Name: William", "Name: Emily", "Name: Jack", "Name: Sofia", "Name: Aleksander", "Name: Lena", "Name: Jakub", "Name: Anna", "Name: Lukas", "Name: Chloe", "Name: Francesco", "Name: Juhani"]
print(random.choice(Name_Liste))
Herkunft_Liste = ["Herkunft: Albanien", "Herkunft: Andorra", "Herkunft: Belarus", "Herkunft: Belgien", "Herkunft: Bosnien und Herzegowina", "Herkunft: Bulgarien", "Herkunft: Dänemark", "Herkunft: Deutschland", "Herkunft: Estland", "Herkunft: Finnland", "Herkunft: Frankreich", "Herkunft: Griechenland", "Herkunft: Irland", "Herkunft: Island", "Herkunft: Italien", "Herkunft: Kroatien", "Herkunft: Lettland", "Herkunft: Litauen", "Herkunft: Luxemburg", "Herkunft: Niederlande", "Herkunft: Norwegen", "Herkunft: Österreich", "Herkunft: Polen", "Herkunft: Portugal", "Herkunft: Rumänien", "Herkunft: Russland", "Herkunft: Schweden", "Herkunft: Schweiz", "Herkunft: Serbien", "Herkunft: Slowakei", "Herkunft: Slowenien", "Herkunft: Spanien", "Herkunft: Tschechien", "Herkunft: Ukraine", "Herkunft: Ungarn", "Herkunft: Vereinigtes Königreich"]
print(random.choice(Herkunft_Liste))
Spieler.kontinent = "Kontinent: Europa"
print (Spieler.kontinent)
print("Bisher gewonnene Spiele:", randint(1, 10))
print("Bisher verlorene Spiele:", randint(1, 10))
print("Spielstärke:", randint(1, 10))
sleep(10)
print("")
print("")

class Land:
pass
print("Als nächstes losen wir dein und das gegnerische Land aus. Achtung du vertrittst Land A.")
sleep(3)
print("loading...")
sleep(3)
print("In der nächsten Runde spielt also:")
print("")
Länder_Liste = ["Land A: Albanien", "Land A: Andorra", "Land A: Belarus", "Land A: Belgien", "Land A: Bosnien und Herzegowina", "Land A: Bulgarien", "Land A: Dänemark", "Land A: Deutschland", "Land A: Estland", "Land A: Finnland", "Land A: Frankreich", "Land A: Griechenland", "Land A: Irland", "Land A: Island", "Land A: Italien", "Land A: Kroatien", "Land A: Lettland", "Land A: Litauen", "Land A: Luxemburg", "Land A: Niederlande", "Land A: Norwegen", "Land A: Österreich", "Land A: Polen", "Land A: Portugal", "Land A: Rumänien", "Land A: Russland", "Land A: Schweden", "Land A: Schweiz", "Land A: Serbien", "Land A: Slowakei", "Land A: Slowenien", "Land A: Spanien", "Land A: Tschechien", "Land A: Ukraine", "Land A: Ungarn", "Land A: Vereinigtes Königreich"]
print(random.choice(Länder_Liste))
Land.kontinent = "Kontinent: Europa"
print (Land.kontinent)
print("Spielstärke:", randint(1, 10))

print("")
print("vs.")
print("")

Länder_Liste = ["Land B: Albanien", "Land B: Andorra", "Land B: Belarus", "Land B: Belgien", "Land B: Bosnien und Herzegowina", "Land B: Bulgarien", "Land B: Dänemark", "Land B: Deutschland", "Land B: Estland", "Land B: Finnland", "Land B: Frankreich", "Land B: Griechenland", "Land B: Irland", "Land B: Island", "Land B: Italien", "Land B: Kroatien", "Land B: Lettland", "Land B: Litauen", "Land B: Luxemburg", "Land B: Niederlande", "Land B: Norwegen", "Land B: Österreich", "Land B: Polen", "Land B: Portugal", "Land B: Rumänien", "Land B: Russland", "Land B: Schweden", "Land B: Schweiz", "Land B: Serbien", "Land B: Slowakei", "Land B: Slowenien", "Land B: Spanien", "Land B: Tschechien", "Land B: Ukraine", "Land B: Ungarn", "Land B: Vereinigtes Königreich"]
print(random.choice(Länder_Liste))
Land.kontinent="Kontinent: Europa"
print (Land.kontinent)
print("Spielstärke:", randint(1, 10))
sleep(5)
print("")
print("")
print("")
print("")
print("Hier einmal die geltenen Spielregeln:")
print("")
print("Stein schleift Schere und zerquetscht Echse.")
print("Papier bedeckt Stein und widerlegt Spock.")
print("Schere schneidet Papier und köpft Echse.")
print("Echse frisst Papier und vergiftet Spock.")
print("Spock zertrümmert Schere und verdampft Stein.")
sleep(10)
print("")
print("Bitte mache dich auch mit der folgenden Steuerung vertraut:")
print("")
print("Schreiben sie Schere für Schere.")
print("Schreiben sie Stein für Stein.")
print("Schreiben sie Papier für Papier.")
print("Schreiben sie Echse für Echse.")
print("Schreiben sie Spock für Spock.")
print("")
print("")
sleep(5)

a = ["Schere", "Stein", "Papier", "Echse", "Spock"]
b = ("SYNTAX ERROR. Ich glaube es gab einen Tippfehler. Achtung! Wir spielen ohne Brunnen.\n")
n = True
while n == True:
print("Okay bist du bereit?")
sleep(2)
print("Das nächste Spiel beginnt. Viel Glück!")
sleep(2)
print("Wir spielen Schere, Stein, Papier, Echse, Spock!")
sleep(2)
print("Land B entscheide bitte jetzt zwischen Schere, Stein, Papier, Echse, Spock.")
z = random.randint(0, 5)
LandB = a[z]
print("Land B hat gewählt.")
LandA = input("Land A du bist drannen! Schere, Stein, Papier, Echse, Spock?\n")
while LandA not in a:
if LandA == ("Brunnen"):
sleep(5)
LandA = input("Achtung! Wir spielen ohne Brunnen!\nBitte wähle zwischen Schere, Stein, Papier, Echse oder Spock!\n")
else:
sleep(1)
print("loading...")
sleep(2)
print("Achtung! Wir haben das Ergebnis.")
sleep(2)
print("Das Ergebniss ist...")
print("")
sleep(2)
if LandB == LandA:
print("Unentschieden!")
ausgang = False
elif (LandB == "Schere" and LandA == "Papier") or (LandB == "Stein" and LandA == "Schere") or (LandB == "Papier" and LandA == "Stein") or (LandB == "Stein" and LandA == "Echse") or (LandB == "Papier" and LandA == "Spock") or (LandB == "Schere" and LandA == "Echse") or (LandB == "Echse" and LandA == "Papier") or (LandB == "Echse" and LandA == "Spock") or (LandB == "Spock" and LandA == "Schere") or (LandB == "Spock" and LandA == "Stein"):
if LandB == "Stein":
print("Land B gewinnt diese Runde mit {} und kommt in die nächste Runde.".format(LandB))
print("Land A du spielst in der zweiten Runde um Platz 3 und 4.")
print("")
sleep(5)
else:
print("Du gewinnst diese Runde mit {} und kommst in die nächste Runde!!".format(LandA))
print(" Herzlichen Glückwunsch du startest in Runde zwei von vier. Viel Glück")
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Julia Chevalier: Als erstes könntest Du mal die Klassen loswerden die keine Klassen sind.

Importe gehören vor den ganzen anderen Code, damit man leicht sehen kann wovon das Modul abhängig ist.

Und man sollte sich entscheiden ob `randint()` über das `random`-Modul anspricht, oder die Funktion importiert. Im Code stehen beide Varianten. Warum?

Auf Modulebene gehört nur Code der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Das kann man ja ganz einfach erst mal alles eine Funktion verschieben, aber auf lange Sicht sollte man das sinnvoll auf weitere Funktionen aufteilen. Knapp 120 Zeilen, davon auch viele zu lang, sind für eine Funktion deutlich zu viel. Wenn man was gegen die überlangen Zeilen macht, können das locker um die 300 Zeilen werden.

Ich weiss das es Leute gibt die 79 oder 80 Zeichen pro Zeile zu kurz finden, aber fast 840 Zeichen in einer Zeile ist echt *zu lang*.

Schau mal in den Style Guide for Python Code.

Grunddatentypen gehören nicht in Namen.

Namen schreibt man in Python klein_mit_unterstrichen. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).

Leerzeilen kann man auch einfach mit ``print()`` ausgeben. Da muss man keine leere Zeichenkette für übergeben.

Diese ganzen künstlichen Verzögerungen sollten raus. `sleep()` + Ausgabe von "loading..." wo gar nichts geladen wird + `sleep()` — was soll das? Das nervt den Anwender bloss.

Was soll die Datenredundanz in den Listen? Warum steht vor jedem Namen in der Namensliste "Name: "? Warum vor jedem Land in der Länderliste "Herkunft: "? Das macht keinen Sinn. Und dann gibt's die gleichen Länder noch mal mit einem "Land A:"- und "Land B:"-Präfix. Die ganzen Ländernamen braucht man nur in *einer* Liste und nicht *drei mal*.

Da wo dann der Code für das Spiel losgeht sind plötzlich schlechte einbuchstabige Namen. Namen sollen dem Leser verraten was der Wert dahinter in dem Programm bedeutet. Einbuchstabige Namen tun das fast nie.

`z` wird falsch bestimmt. Das kann die Werte 0 bis 5 *inklusive* annehmen. In der Liste für die `z` danach als Index verwendet wird sind aber nur 5 Elemente, also Indizes von 0 bis 4 *inklusive*. 5 führt da zu einem `IndexError`. Du kennst doch schon `random.choice()`, warum verwendest Du das dort nicht?

`n` wird nicht wirklich benutzt. Da kann man in die ``while``-Schleife auch einfach `True` als Bedingung schreiben, ohne das unnötigerweise an einen Namen zu binden. `b` und `ausgang` werden definiert und nirgends verwendet.

Man vergleicht keine Wahrheitswerte mit literalen Wahrheitswerten. Da kommt ja nur wieder ein Wahrheitswert bei heraus. Entweder der den man sowieso schon hatte, dann nimmt man den halt, oder dessen Gegenteil, dann kann man den mit ``not`` negieren.

Da ist ein ``else`` zu einer ``while``-Schleife was keinen Sinn macht. Das gehört weg und der Code einfach hinter die Schleife.

Statt alle Kombinationen in einer ``if``-Bedingung abzuprüfen würde man die Regeln welcher Spielzug welchen anderen Spielzug schlägt als Datenstruktur aufschreiben und das ganze damit wesentlich übersichtlicher machen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten