【发布时间】:2020-01-10 10:35:54
【问题描述】:
我正在尝试打印一个包含字母表中的字母的字符串。在用户猜到每个字母之后,该猜到的字母将从字母表中删除,然后在控制台中打印以显示尚未猜到的字母。
到目前为止,我已经尝试过 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
【问题讨论】:
-
26 个字符的布尔类型持有值的列表。每次猜测字符时,将它们设置为 True,这意味着它不能被使用。很简单。
-
您没有重新分配字母表的值,只是打印没有字母的副本,所以字母当然仍然存在于实际变量本身中。尝试输入
alphabet = alphabet.translate(...)。 -
translate 返回一个修改后的 copy 它不会修改
alphabet本身。你需要重新分配它。
标签: python python-3.x string loops