hangman项目存在问题,在python中,每次字母都会重置
我正在做一个刽子手计划。当用户输入一个字母时,即使输入下一个字符,它也应该出现,但问题是它会完全重置。如何解决此问题?脚本的主要问题是没有跟踪猜测字母,因此,每次迭代都会“重置”这些字母。在循环外部定义一个变量,用于跟踪猜测的字母。在本例中,hangman项目存在问题,在python中,每次字母都会重置,python,python-3.x,Python,Python 3.x,我正在做一个刽子手计划。当用户输入一个字母时,即使输入下一个字符,它也应该出现,但问题是它会完全重置。如何解决此问题?脚本的主要问题是没有跟踪猜测字母,因此,每次迭代都会“重置”这些字母。在循环外部定义一个变量,用于跟踪猜测的字母。在本例中,guessed_chars是一个列表,该列表使用由目标单词长度确定的可变下划线量进行初始化: import random list_of_words = ["ability", "able", "above
guessed_chars
是一个列表,该列表使用由目标单词长度确定的可变下划线量进行初始化:
import random
list_of_words = ["ability", "able", "above", "administration", "against", "agency", "along",
"almost", "answer"]
guessword = random.choice(list_of_words)
while True:
result = input("Enter your guess: ")
for word in guessword:
if word in result:
print(word)
else:
print("_")
现在是while循环。在本例中,我使用了枚举
,它允许您并行地迭代iterable的索引和元素。请注意,我们还将while语句更改为while'。join(猜测字符)!=word
。我们必须在这里使用join
,因为记住,gusted_chars
是一个列表
,我们将其与str
进行比较。这意味着它将继续运行,直到正确猜测的字母的连接列表等于单词
使用枚举
,以便我们可以将猜字符
中正确位置的下划线替换为正确猜字符。然后,在循环结束时,我们只需打印连接的字符列表,使其看起来像:ab\uuuu
表示“以上”
你需要记住你已经猜到的单词,所以这里我用dict
players\u guess
来存储它们
while "".join(guessed_chars) != word:
guess_char = input("Enter your guess: ")
for i, char in enumerate(word):
if char == guess_char:
guessed_chars[i] = guess_char
print("".join(guessed_chars))
输出如下所示:
import random
list_of_words = ["ability", "able", "above", "administration", "against", "agency", "along",
"almost", "answer"]
guessword = random.choice(list_of_words)
players_guess = { }
while True:
result = input("Enter your guess: ")
for word in guessword:
if word in result or word in players_guess:
players_guess[result] = True
print(word)
else:
print("_")
您缺少一些步骤: 版本1 给出:
import random
list_of_words = ["ability", "able", "above", "administration", "against", "agency", "along", "almost", "answer"]
guessword = random.choice(list_of_words)
while True:
result = input("Enter your guess: ")
if result == guessword:
print(guessword)
break
elif result == 'exit':
break
for i, letter in enumerate(guessword):
if i > len(result) - 1:
print("_", end='')
else:
if letter == result[i]:
print(letter, end='')
else:
print("_", end='')
print('\n')
版本2
正如在评论中提到的,游戏规则应该是不同的,所以这里是相同的方法导致了一些不同的结果
Enter your guess: ability
ab___
Enter your guess: able
ab___
Enter your guess: above
above
给予
评论
循环允许您灵活:无限播放或添加一些猜测次数的验证(因此您的选择是好的)while
- 但是,您不应该忘记退出这个无限循环(因此这里的关键字非常方便)李>
- 用户可以输入几个字母(这可能违反规则),所以我们需要检查它李>
- 用户可以输入大写字母,所以我们需要它李>
- 我在这段代码中使用:它有助于遍历元素及其索引
For word in guessword
更适合于For letter in guessword
,因为对字符串的迭代会对其字符进行迭代。在保存猜测的字母时,它不会在下次运行时显示单词中的猜测字母。我想这就是OP想要的。因此,如果您在下一轮中猜测a
的able
和猜测b
,您的代码将显示\u b_uuuuuuuuu
,而不是ab_uuuuuu
@funie200 ohhhhh好的,谢谢您的澄清。我会编辑accordingly@funie200编辑。再次感谢你指出这一点。嗯,为什么要用“-1”?代码完全按照要求执行:打印字母并在错误的字母中填入“\u1”。OP没有要求将结果保存在字典或列表中,只使用代码回答对OP没有帮助,它只是给了他们答案。如果你解释一下你的代码在做什么,那会更有帮助。另外,需要指出的是(不是否决投票的原因,因为最初的问题不够清楚):绞刑犯是通过一次猜一个字母来玩的,直到你正确猜到的字母组成了你要猜的单词。不允许用户一次猜测多个字符。这意味着您确实需要在循环之外的某个地方跟踪猜测的字母?我认为OP或多或少了解,而和的循环和打印方法是如何工作的。另外,我在最后添加了一些评论。关于你最后的评论,我同意。然而,我接受了OP的逻辑:验证每个字母,如果猜对了,打印出来。虽然对我们来说可能很简单,但对OP来说可能不是。我认为,对于正在开始学习过程的人来说,对某些事情有一些解释会更清楚。例如,您添加了enumerate
和各种break
语句,这些语句对OP来说可能都是全新的。虽然StackOverflow是一个寻找答案的好地方,但它也是一个非常有用的学习工具。在你的答案的开头,一个简单的解释,记录下你所做的改变,以及你为什么做这些改变,这将是非常棒的!
import random
list_of_words = ["ability", "able", "above", "administration", "against", "agency", "along", "almost", "answer"]
guessword = random.choice(list_of_words)
while True:
result = input("Enter your guess: ")
if result == guessword:
print(guessword)
break
elif result == 'exit':
break
for i, letter in enumerate(guessword):
if i > len(result) - 1:
print("_", end='')
else:
if letter == result[i]:
print(letter, end='')
else:
print("_", end='')
print('\n')
Enter your guess: ability
ab___
Enter your guess: able
ab___
Enter your guess: above
above
import random
list_of_words = ["ability", "able", "above", "administration", "against", "agency", "along", "almost", "answer"]
guessword = random.choice(list_of_words)
user_word = ['_']*len(guessword)
while True:
user_guess = input("Enter your guess: ")
if user_guess == 'exit':
break
elif len(user_guess) != 1:
print('Your guess should be one letter long!')
continue
for i, letter in enumerate(guessword):
if user_guess.lower() == letter:
user_word[i] = letter
print(user_word[i], end='')
print('')
if not '_' in user_word:
print('You win!')
break
Enter your guess: ab
Your guess should be one letter long!
Enter your guess: a
a____
Enter your guess: b
a____
Enter your guess: l
al___
Enter your guess: g
al__g
Enter your guess: o
alo_g
Enter your guess: n
along
You win!