首页 > 解决方案 > 如何在while循环中的每个循环之后从字符串中删除一个字符

问题描述

我正在尝试打印一个包含字母表中字母的字符串。在用户猜到每个字母之后,该猜到的字母将从字母表中删除,然后在控制台中打印以显示尚未猜到的字母。

到目前为止,我已经尝试过remove()translate()filter()。每次我尝试过,该字母都会成功删除,但是当需要删除另一个字母时,第一个字母会重新出现在字符串中,而第二个字母现在被删除了。基本上,字母不会被删除,只会在那个循环中消失。

背景信息:我正在 python3 中制作一个刽子手应用程序。因此,我遇到问题的部分代码位于函数中的 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

实际结果:(注意字母 'a' 在用户输入 'h' 后重新出现。)

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

标签: pythonpython-3.xstringloops

解决方案


您可以为此使用集合。首先,您创建一个包含字母表中所有字母的集合。此外,您想跟踪哪些是另一组中的猜测词。然后,每次用户猜测某个字母时,您将其添加到猜测集中。最后,您只需打印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

推荐阅读