繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM