2016-03-24 3 views
0

Ich mache ein Hang-Man-Spiel. Wenn ich den Code ohne eine bedingte und Klassen gemacht habe, hat es gut funktioniert. Grundsätzlich sind meine Probleme mit dem folgenden Code:Python: Der Code widerspricht die bedingte abhängig von der Eingabe

  1. Nur der Buchstabe "t" wird übereinstimmen. Ich kann keinen anderen Buchstaben finden.

  2. Wenn ich beim ersten Versuch "t" eintrage, dann absichtlich die nächsten 4 Buchstaben falsch eingeben, wird es erst nach 7 Umdrehungen enden. Wenn ich jedoch zuerst einen anderen Buchstaben eintrage, wird er nach 4 falschen Drehungen enden, wie es sollte.

Meine Fragen ....

  1. Wie kann ich es mit den anderen Buchstaben übereinstimmen, die in dem self.word Index sind?

  2. Warum gehorcht es nicht der Bedingung, die ich mit der While-Schleife in der Hauptmethode eingestellt habe, wenn ich bei meinem ersten Versuch "t" eintrage und danach alle anderen Buchstaben falsch lese?

    class Hang(): 
    
        def __init__(self): 
         self.turns = 0 
         self.word = ['t', 'h', 'i', 's'] 
         self.empty = ["__", "__", "__", "__"] 
         self.wrong = [] 
    
        def main(self): 
         while self.turns < 4: 
          for i in self.word: 
           choice = raw_input("Enter a letter a-z: ") 
           if choice == i: 
            index = self.word.index(i) 
            self.empty.pop(index) 
            self.empty.insert(index, i) 
            print self.empty 
           else: 
            print "Wrong" 
            self.wrong.append(choice) 
            print self.wrong 
            print self.empty 
            self.turns += 1 
    
    char1 = Hang() 
    char1.main() 
    

Antwort

0

Im Spiel des Henkers können Sie ein beliebiges Zeichen in dem Satz in beliebiger Reihenfolge erraten. Aber Sie verwenden eine for-Schleife durch jedes Zeichen, um zu gehen und es ist nur dann korrekt, wenn der Spieler die Zeichen korrekt um errät

Versuchen Sie stattdessen

while self.turns < 4: 

    choice = raw_input("Enter a letter a-z: ") 

    # optional, if user enters more than a single letter 
    if len(choice) > 1: 
     print "invalid choice" 
     continue     # loop again from start 

    index = self.word.index(choice) 

    if index != -1:  
     # -1 indicates character in not int the string 
     # so this block is only executed if character is 
     # in the string 

     self.empty[index] = choice  # no need to pop, you can simply change the value of the list at a given index 

    else: 
     print "wrong" 
     self.turns += 1 

    print self.empty 
+0

'index = self.word.index (i) 'Woher kommt das i in der index() -Methode? – staredecisis

+0

@staredecisis tut mir leid, sollte index (wahl) sein – francium