Python 如何在while循环中的每个循环后从字符串中删除字符

Python 如何在while循环中的每个循环后从字符串中删除字符,python,python-3.x,string,loops,Python,Python 3.x,String,Loops,我正在打印一个包含字母表中字母的字符串。在用户猜测每个字母后,该猜测的字母将从字母表中删除,然后在控制台中打印,以显示哪些字母尚未被猜测 到目前为止,我已经尝试过删除、翻译和过滤。每次我尝试时,都会成功删除该字母,但当需要删除另一个字母时,第一个字母会重新出现在字符串中,第二个字母现在会被删除。基本上,字母不会一直被删除,只会在一个循环中消失 背景信息:我正在用Python 3制作一个刽子手应用程序。所以我遇到问题的部分代码在函数中的while循环中。我正在用Python 3制作一个刽子手应用程

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

到目前为止,我已经尝试过删除、翻译和过滤。每次我尝试时,都会成功删除该字母,但当需要删除另一个字母时,第一个字母会重新出现在字符串中,第二个字母现在会被删除。基本上,字母不会一直被删除,只会在一个循环中消失

背景信息:我正在用Python 3制作一个刽子手应用程序。所以我遇到问题的部分代码在函数中的while循环中。我正在用Python 3制作一个刽子手应用程序。所以我遇到问题的部分代码在函数中的while循环中

字母表=abcdefghijklmnopqrstuvxyz 猜测= 打印这些尚未猜到的字母:+alphabet.translate{ordguess: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
您也可以使用str.replace方法,但与上面一样,您必须重新分配alphabet的值


alphabet=alphabet。替换“a”,您会遇到问题,因为python中的字符串本质上是不可变的。这意味着你不能改变它们。请记住,使用update etc基本上会更改变量引用的地址。所以我认为您可能忘记了更新代码中的字母表变量

以下是你能做的-


您可以为此使用集合。首先,创建一个包含字母表中所有字母的集合。此外,您还需要跟踪另一集中的猜测单词。然后,每次用户猜测某个字母时,您都会将其添加到猜测集中。最后,您可以打印字母表-猜测。最后,我使用了.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更新:使用排序函数按字母顺序打印集合中的元素

print("These letters haven't been guessed yet: " + ''.join(sorted(alphabet - guessed)))
#Output: These letters haven't been guessed yet: bcdefghijklmnopqrstuvwxyz

布尔型保留值的26个字符列表。每次你猜到这个角色时,把它们变成真的,这意味着它不能被使用。很简单,你没有重新分配字母表的值,只是打印了一份没有字母的副本,所以字母当然仍然存在于实际变量中。尝试放置alphabet=alphabet.translate…translate返回修改后的副本,但不会修改字母表本身。您需要重新分配它。我会添加排序以提高可读性,并将其设置为f字符串:printft这些字母尚未猜测:{.joinsortedalphabet-gusted}-@福普斯先生,我没有注意这个细节,谢谢。我还将在我的答案中添加您的修改。谢谢大家的帮助!正是我所需要的,完全忽略了字符串在python中是不可变的这一事实
print("These letters haven't been guessed yet: " + ''.join(sorted(alphabet - guessed)))
#Output: These letters haven't been guessed yet: bcdefghijklmnopqrstuvwxyz