J'essaie d'imprimer une chaîne qui inclut des lettres dans l'alphabet. Après chaque lettre, l'utilisateur devine, cette lettre devinée serait retirée de l'alphabet, puis imprimée dans la console pour montrer quelles lettres n'ont pas encore été devinées.
jusqu'à présent, j'ai essayé Info de fond: Je fais une application de python3. Donc, une partie du code que j'ai des problèmes est dans une boucle tandis que dans une fonction. Je fais une application de python3. Donc, une partie du code que j'ai des problèmes est dans une boucle tandis que dans une fonction. p> résultat attendu: p> (Notez que le précédent ne réapparaît pas après la deuxième entrée.) P> supprimer () code>, traduire () code> et filtre () code>. Chaque fois que j'ai essayé, la lettre est supprimée avec succès, mais quand il est temps de supprimer une autre lettre, la première lettre réapparaît dans la chaîne et la deuxième lettre est maintenant supprimée. Fondamentalement, les lettres ne restent pas enlevées et ne sont absentes que pour cette boucle. P> guess = input("Enter a letter: ")
Enter letter: a
These letters haven't been guessed yet: bcdefghi
guess = input("Enter a letter: ")
Enter letter: h
These letters haven't been guessed yet: abcdefgi
3 Réponses :
Vous pouvez également utiliser la méthode str.replace code> ( https://docs.python.org/3.6/Library/stdtypes.html#str.replace ), mais comme ci-dessus, vous devez réaffecter la valeur de l'alphabet. P>
alphabet = alphabet.replace ('a', '') code> p>
Vous avez un problème car les cordes de python sont immuables dans la nature. Cela signifie que vous ne pouvez pas les changer. N'oubliez pas que l'utilisation de la mise à jour, etc. modifie essentiellement l'adresse à laquelle votre variable référencie. Donc, je pense que vous avez probablement oublié de mettre à jour la variable d'alphabet dans votre code.
Voici ce que vous pouvez faire - strong> p> alphabet = "abcdefghijklmnopqrstuvwxyz"
guess = input("Enter a letter: ")
CONSOLE - Enter a letter: a
alphabet = alphabet.replace(guess, '')
print('These letters haven\'t been guessed yet:', alphabet)
CONSOLE - These letters haven't been guessed yet: bcdefghijklmnopqrstuvwxyz
guess = input("Enter a letter: ")
CONSOLE - Enter a letter: h
alphabet = alphabet.replace(guess, '')
print('These letters haven\'t been guessed yet:', alphabet)
CONSOLE - These letters haven't been guessed yet: bcdefgijklmnopqrstuvwxyz
Vous pouvez utiliser des ensembles pour cela. Vous créez d'abord un ensemble contenant toutes les lettres de l'alphabet. De plus, vous voulez suivre qui sont les mots devinés dans un autre ensemble. Ensuite, chaque fois qu'un utilisateur devine une lettre, vous l'ajoutez à l'ensemble devineux. À la fin, vous pouvez simplement imprimer l'alphabet - deviné code>. À la fin, je viens d'utiliser ''. Rejoindre code> pour un meilleur format de sortie.
J'ajouterais trié code> pour la lisibilité et en créer un f-string code>: print (f "Ces lettres n'ont pas encore été devinées: {'' .Joing (trié (alphabet - devined))} ") code> ;-)
@MRFUPPES, je n'ai pas fait attention à ce détail, merci. Je vais également ajouter votre modification dans ma réponse.
Merci à tous pour l'aide! Exactement ce dont j'avais besoin, totalement masqué sur le fait que les cordes sont immuables en python
Liste de 26 caractères de la valeur de détention de type booléen. Chaque fois que vous devinez le personnage, tournez-les en vrais qui signifie qu'il ne peut pas être utilisé. Aussi simple.
Vous ne réaffectez pas la valeur de l'alphabet, n'imprimez qu'une copie de celui-ci sans une lettre, donc bien sûr que la lettre sera toujours présente dans la variable effective elle-même. Essayez de mettre
alphabet = alphabet.translate (...) code>.Traduire les retours Une modifiée Copie i> Il ne modifie pas
alphabet code> lui-même. Vous devez le réaffecter.