2017-07-19 4 views
-1

Ich erstelle ein Hangman-Programm, und ich habe die list() Funktion verwendet, um das Wort in eine Liste zu verwandeln, in der jeder Buchstabe ein eigenes Element ist. Wenn der Benutzer Buchstaben als Vermutungen eingibt, möchte ich, dass der Buchstabe aus der Liste gelöscht wird. Ich habe versucht, die list.remove(obj) Funktion und es funktioniert nicht als wenn ich in die Shell den Namen der Liste eingeben, keine Buchstaben wurden gelöscht.Element löscht nicht aus Liste

 
wordList=list(word) 
letter=input("please enter a letter") 
if len(letter)>1: 
    print('invalid input, you may only enter one letter at a time') 
elif letter.isalpha(): 
    if letter in letters: 
     print('you have already entered this letter') 
    else: 
     letters.append(letter) 

     if any(letter in s for s in wordList,): 
      print(letter,"is in the word") 
      wordList.remove(letter) 

Nach Länge bearbeitet. Irgendwelche Ideen, warum die Buchstaben nicht von wordList entfernt werden?

+1

Ich kann nicht reproduzieren. Dein Code entfernt Buchstaben aus 'wordList', wenn ich deinen Code ausführe. – davedwards

+0

Hinweis: Wenn sich ein Buchstabe mehr als einmal in "wordList" befindet, entfernt 'wordList.remove (letter)' nur die erste Instanz. (zB wenn 'word =" hallo "' dann 'wordList' wird' ['h', 'e', ​​'l', 'l', 'o'] ', und wenn' letter = 'l'', nach dem Ausführen von 'wordlist.remove (letter)' wird 'wordlist' '['h', 'e', ​​'l', 'o']', was bedeutet, dass "l'" immer noch in "wordList" wäre '.) Sie wären wahrscheinlich besser dran mit einem Set dafür. – 3D1T0R

Antwort

0

Ich konnte Ihren Code ausführen. schlägt eine kleine Änderung vor, um mehrere Vorkommen des Briefes zu entfernen.

word = "apple" 
wordList=list(word) 
while wordList != []: 
    letter=input("please enter a letter") 
    letters = [] 
    if len(letter)!=1: 
     print('invalid input, you may only enter one letter at a time') 
    if letter.isalpha(): 
     if letter in letters: 
      print('you have already entered this letter') 
     else: 
      letters.append(letter) 
     if any(letter in s for s in wordList,): 
      print(letter,"is in the word") 
      wordList =filter(lambda a: a != letter, wordList) 
      #wordList.remove(letter) 
    print wordList 

list.remove() - Entfernt nur das erste Vorkommen des Briefes. Sie können verwendet werden:

filter(lambda a: a!=letter, wordList) 
0

ich das neu erstellt und es funktioniert für mich: enter image description here

aber ich glaube nicht, dies ist der richtige Ansatz, um Ihr Problem ist, weil .remove() nur mit dem ersten Spiel arbeiten auf Ihrer Liste, könnten Sie so etwas wie

letters = list('_'*len(wordList)) 
if letter in wordList: 
    qtty = wordList.count(letter) 
    position = wordList.index(letter) 
    letters[position] = letter 
if qtty > 1: 
    for i in range(qtty-1): 
     position = wordList.index(letter, position+1)     
     letters[position] = letter 

auf diese Weise haben Sie statt einer vollständigen Liste versuchen, jedes Mal wenn Sie den rigth Brief einfügen zu entfernen, wird eine leere (tatsächlich voll von ‚_‘ Charakter haben e) Liste, und fügte hinzu, die Buchstaben zu seiner Position jedes Mal wenn Sie die richtigen Buchstaben einfügen, auf diese Weise können Sie das aktuelle Wort drucken wie diese enter image description here

i ein Spiel wie diese gemacht habe, sein auf meine github, den Anweisungen sind auf Spanisch, aber es ist einfach zu folgen

Verwandte Themen