Anfänger braucht Hilfe

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
cntrx
User
Beiträge: 7
Registriert: Montag 13. April 2015, 17:16

Hallo zusammen, mein Name ist Cntrx. Ich bin gerade dabei Python 3 zu erlernen.
So hab ich mich heute mal hin gesetzt und mir ein Scheere, Stein, Papier geamcht.
Nun ist es aber so, wenn ich Scheere auswähle, kommt wieder die frage was ich wählen möchte.
Bei Stein und Papier geht es Problemlos.

Kann mir jemand helfen?

Code: Alles auswählen

import random

kic = random.randint(1,3) #Ki zufällig Auswahl

spielerc = True             

#Hauptprogramm

print ("")
print ("exit eingeben um das Spiel zu beenden!")
print ("")
print ("")
print ("")


#Namen
name = input("Wie heißt du? ")
if (name == "exit"):
    sys.exit ()
    print ("")
print ("")
print ("Hallo %s, viel Spaß bei Scheere,Stein,Papier!" % name)



# Ki-Auswahl
if kic == 1:
    kic = "Scheere"
elif kic == 2:
    kic = "Stein"
elif kic == 3:
    kic = "Papier"


# Spieler Auswahl
while spielerc == True:
    print ("")
    print ("")
    print ("Wähle zwischen 1.Scheere, 2.Stein, 3.Papier!")
    print ("")
    print ("")
    spielerc = eval (input(""))

    if spielerc == 1:
        print ("%s hat Scheere gewählt!" % name)
        spielerc == False
        
    elif spielerc == 2:
        print ("%s hat Stein gewählt!" % name)
        spielerc == False
        
    elif spielerc == 3:
        print ("%s hat Papier gewäht!" % name)
        spielerc == False
        
    else:
        print (" Wähle mit 1, 2,3.")
        spielerc == True


print ("")
print ("")
print ("Dein Gegner hat " +kic+ " gewählt!")
print ("")
print ("")



# Gewinn-Bedinungen
if spielerc == 1 and kic == "Scheere":
    print ("Draw!")
elif spielerc == 2 and kic == "Stein":
    print ("Draw!")
elif spielerc == 3 and kic == "Papier":
    print ("Draw!")
elif spielerc == 1 and kic == "Stein":
    print ("Verloren! Stein schlägt Scheere!")
elif spielerc == 2 and kic == "Papier":
    print ("Verloren! Papier schlägt Stein!")
elif spielerc == 3  and kic == "Scheere":
    print ("Verloren! Scheere schlägt Papier!")
elif spielerc == 1 and kic == "Papier":
    print ("Gewonnen!  Scheere schlägt Papier!")
elif spielerc == 2 and kic == "Scheere":
    print ("Gewonnen!  Stein schlägt Scheere!")
elif spielerc == 3 and kic == "Stein":
    print ("Gewonnen!  Papier schlägt Stein!")
        
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@cntrx: das liegt daran, dass 1 == True ist. Und da Scheere 1 ist, wird die Schleife nicht verlassen.

Das eigentliche Problem ist aber, dass Du zu sparsam mit Variablennamen bist. Du bindest an den selben Namen verschiedene Dinge, und benutzt diese Variablen auch gleichzeitig für verschiedene Dinge. Das fängt mit kic an. Das ist mal eine Zahl mal ein String. spielerc ist mal ein Boolean, mal eine Zahl. Auch wenn es möglich ist, sollte einer Variable immer nur einen Datentyp zugewiesen werden und natürlich nur für eine Sache benutzt werden.

Noch ein paar allgemeine Anmerkungen, die Du sofort umsetzen solltest:
Variablennamen sollten aussagekräftig sein. Was heißt z.B kic oder das rc in spielerc?
Zwischen öffnender Klammer und Funktionsname sollte kein Leerzeichen stehen, sonst verwechselt man das leicht mit einer mathematischen Klammerung.
eval solltest Du gleich wieder vergessen. Wenn Du einen String in einen Integer-Wert umwandeln willst, gibt es dafür die Funktion int (zeile 42).
Ausdrücke, die nichts bewirken, solltest Du gleich ganz weglassen (Zeile 46, 50, 54, und 58).
cntrx
User
Beiträge: 7
Registriert: Montag 13. April 2015, 17:16

Danke hab das jetzt mal berücksichtig. Es funtioniert jetzt ohne Problem. Nun will ich den modus best of 3, also 2 Siege zum Runden Sieg. Aber wo ist mein Fehler?

Code: Alles auswählen

import random

print("exit eingeben um das Spiel zu beenden!")
print("")

#Namen
name=input("Wie heißt du? ")
if(name == "exit"):
    sys.exit()
print("Hallo %s, viel Spaß bei Schere,Stein,Papier!" % name)

punkteki = 0    #Punkte der KI
punktepl = 0    #Punkte Spieler

while 1:
    kic = random.randint(1,3) #Ki zufällig Auswahl
    #Ki-Auswahl
    if kic == 1: #KI-Choose
        kitext = "Schere" #KI-Textausgabe
    elif kic == 2:
        kitext = "Stein"
    elif kic == 3:
        kitext = "Papier"

    #Spieler-Auswahl
    print("Wähle zwischen 1.Schere, 2.Stein, 3.Papier!")

    spielerc = int(input(""))
    if spielerc == 1: #Spieler-Choose
        print("%s hat Schere gewählt!" % name)
    elif spielerc == 2:
        print("%s hat Stein gewählt!" % name)
    elif spielerc == 3:
        print("%s hat Papier gewäht!" % name)
        
    print("Dein Gegner hat " +kitext+ " gewählt!")

    #Gewinn-Bedienungen
    if punktepl == 2:
        print("%s ist der Sieger" % name)
    elif punkteki == 2:
        print ("%s hat Verloren" % name)
    elif spielerc == 1 and kic == 1:
        print("Draw!")
    elif spielerc == 2 and kic == 2:
        print("Draw!")
    elif spielerc == 3 and kic == 3:
        print("Draw!")
    elif spielerc == 1 and kic == 2:
        print("Gegner hat einen Punkt! Stein schlägt Schere!")
        punkteki = +1
    elif spielerc == 2 and kic == 3:
        print("Gegner hat einen Punkt!! Papier schlägt Stein!"% name)
        punkteki = +1
    elif spielerc == 3  and kic == 1:
        print("Gegner hat einen Punkt!! Scheere schlägt Papier!"% name)
        punkteki = +1
    elif spielerc == 1 and kic == 3:
        print("%s hat einen Punkt! Schere schlägt Papier!" % name)
        punktepl = +1
    elif spielerc == 2 and kic == 1:
        print("%s einen Punkt! Stein schlägt Schere!" % name)
        punktepl = +1
    elif spielerc == 3 and kic == 2:
        print("%s einen Punkt! Papier schlägt Stein!" % name)
        punktepl = +1
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

Kleinigkeiten, die mir aufgefallen sind: Du müsstest dir mal die while-Schleife ansehen und du solltest dir mal "\n" ansehen, was einen Zeilenumbruch erzeugt. Du verwendest noch keine Funktionen, weshalb ich deinen Quelltext schwer lesbar finde.

Mit Funktionen kannst du Quelltext aus deinem Hauptprogramm auslagern, getrennt entwickeln und testen und reduzierst Komplexität.
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

cntrx hat geschrieben:wo ist mein Fehler?
Ja, wo ist denn der Fehler? Läuft der Code nicht, kommt eine Fehlermeldung? Verhält sich das Programm anders als du es erwartest? Erwartest du, dass wir das alles raten können? Können wir nämlich nicht, wir brauchen deine detailierte Beschreibung. :mrgreen:
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
cntrx
User
Beiträge: 7
Registriert: Montag 13. April 2015, 17:16

@ Döner :P
:mrgreen: Ja klar, hätte ich auch selbst drauf kommen können...
@ Pixe
Danke, ok werde ich nochmal tun.


Die Punkte pro Sieg werden nicht gezählt und so hänge ich in der Endlos-Schleife
BlackJack

@cntrx: Dann überleg doch mal genau was ein Audruck wie ``value = +1`` bedeutet.
cntrx
User
Beiträge: 7
Registriert: Montag 13. April 2015, 17:16

Ach so ich setze dabei nur den Wert auf +1 oder ?
Aber wie zähle ich dann dazu?
BlackJack

@cntrx: Na entweder in dem Du auf der rechten Seite der Zuweisung den alten Wert plus eins schreibst, oder den passenden Operator verwendest der Dich das etwas kürzer schreiben lässt. :-)
cntrx
User
Beiträge: 7
Registriert: Montag 13. April 2015, 17:16

Danke euch, die Hilfestellung von euch war sehr gut!
Vielen lieben Dank und Danke auch für die Gedult solche Frage zu beantworten!
Antworten