[英]How to remove a character from string after every loop in a while loop
我正在尝试打印一个包含字母的字符串。 用户猜出每个字母后,将从字母表中删除该猜出的字母,然后将其打印在控制台中以显示尚未猜到的字母。
到目前为止,我已经尝试过remove()
, translate()
和filter()
。 每次尝试,都会成功删除该字母,但是当要删除另一个字母时,第一个字母会再次出现在字符串中,而第二个字母现在会被删除。 基本上,字母不会保持删除状态,只会在该循环中消失。
背景信息:我正在python3中制作一个hangman应用。 因此,我遇到麻烦的部分代码在函数的while循环内。 我正在python3中制作一个子手应用程序。 因此,我遇到麻烦的部分代码在函数的while循环内。
alphabet = "abcdefghijklmnopqrstuvwxyz"
guess = " "
print("These letters haven't been guessed yet: " + alphabet.translate({ord(guess): None}))
预期结果:
(请注意,第二个输入后,前一个不会再出现。)
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: bcdefgi
实际结果:(请注意,在用户输入“ h”之后,字母“ a”已重新出现。)
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
您可以为此使用集。 首先,创建一个包含字母表中所有字母的集合。 另外,您想跟踪另一组中哪些是猜中的单词。 然后,每次用户猜出某个字母时,便将其添加到猜中的字母集中。 最后,您可以仅打印alphabet - guessed
。 最后,我只是使用''.join
以获得更好的输出格式。
alphabet = set("abcdefghijklmnopqrstuvwxyz")
guessed = set()
guess = "a"
guessed.add(guess)
print("These letters haven't been guessed yet: " + str(alphabet - guessed))
#Output: These letters haven't been guessed yet: {'c', 'd', 'y', 'r', 'i', 'h', 'g', 'o', 'q', 'x', 'v', 'k', 'j', 'z', 'p', 'n', 'u', 'm', 'l', 'b', 't', 'w', 'e', 'f', 's'}
print("These letters haven't been guessed yet: " + ''.join(alphabet - guessed))
#Output: These letters haven't been guessed yet: cdyrihgoqxvkjzpnumlbtwefs
从@MrFuppes更新 :使用sorted
的功能以字母顺序打印集合中的元素
print("These letters haven't been guessed yet: " + ''.join(sorted(alphabet - guessed)))
#Output: These letters haven't been guessed yet: bcdefghijklmnopqrstuvwxyz
您也可以使用str.replace
方法( https://docs.python.org/3.6/library/stdtypes.html#str.replace ),但是像上面一样,您必须重新分配字母的值。
alphabet = alphabet.replace('a', '')
您遇到了问题,因为python中的字符串本质上是不可变的。 这意味着您无法更改它们。 请记住,使用update等基本上会更改变量所引用的地址。 因此,我认为您可能忘记了更新代码中的字母变量。
您可以在这里做-
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.