2016-12-16 4 views
1

Ich mache eine einfache textbasierte Hangman-Spiel, und ich möchte überprüfen, ob ein Benutzer eingegebene Buchstaben Teil einer Liste mit den Zeichen für das Wort, das der Benutzer ist soll raten.in Anweisung funktioniert nur einmal für eine Liste in Python

ist hier, dass ein Teil des Codes:

while True: 
print "Guess a letter/The word (%d attempts remaining.)" % attempts 
guess = raw_input() 
if len(guess) == 1: 
    if guess in chars: 
     blankslist[chars.index(guess) * 2] = guess 
     blanks = "".join(str(x) for x in blankslist) 
     print blanks 
    else: 
     print "Nope!" 
     attempts -= 1 
     if attempts <= 0: 
      print "Game Over! The word was %s" % chosen_word 
      break 

elif len(guess) == len(chosen_word): 
    if guess == chosen_word: 
     print "Congrats, you won with %d attempts left!" % attempts 
    else: 
     print 'Oh no, you lost... The correct word was "%s".' % chosen_word 
    break 

else: 
    print("Input a single letter") 

für Worte jedoch die doppelten Buchstaben enthalten, wie zum Beispiel „Nilpferd“, wird es nur eine „p“ erkennen. Wie kann ich beide erkennen lassen?

EDIT: Hinzugefügt ganze Schleife für jemanden, der gefragt hat.

+0

können Sie für Schleife im Code hinzufügen, wie zu erraten und Zeichen erhalten nach jeder Schleife geändert –

+0

'.index (rate)' gibt den ersten Index dieses Wertes zurück, durchläuft einfach die Liste und ersetzt alle Vorkommen. –

+0

Warum ist 'Blankslist' doppelt so lang wie' chars'? –

Antwort

1

.index(guess) gibt nur den ersten gefundenen Index zurück.

Sie so etwas wie dies nutzen könnten alle Indizes zu erhalten:

positions = [i for i, char in enumerate(chars) if guess == char] 

und dann die Schleife durch diese Liste:

for p in positions: 
    blankslist[p * 2] = guess 
+0

Es hat funktioniert, aber könnten Sie mir erklären, was die erste Codezeile, die Sie hinzugefügt haben, tut? Als Anfänger kann ich es nicht ganz verstehen. –

+0

@ J.C. nützliche Ressource, um Verständnis der Liste zu verstehen: http://treyhunner.com/2015/12/python-list-comprehensions-now-in-color/ auch 'help (enumerate)' wird erklären, dass Teil –

+0

@ J.C. enumerate wandelt jedes Element der Liste in ein Tupel um, wobei das nullte Element "i" der Index ist und das erste Element "char" das ursprüngliche Element ist. Sie können es ohne Listenverständnis umschreiben als 'positions = []'/'für i, char in enumerate (chars):'/'wenn rate == char:'/'positions.append (i)' –