在这种情况下如何破解

How to break in this situation

所以我几乎完成了 Hangman 程序(只是框架)的制作,但是我在打破循环方面遇到了麻烦。这是因为我应该允许用户进行无限制的试用,所以我不能使用类似的东西:

x = 10
while x != 0
   do something
   x -= 1

但是,我想出了另一种方法 - 制作一个 guess_list 包含尝试过的每个字母并说:

if final_letter in guess_list:
break

我认为这会工作得很好(而且它做了几次试验),但我只是再次检查了程序并且它没有工作(我将在此处插入图片以显示详细信息)。

我在这里注意到的是我需要按顺序输入所有内容(如果 'friend';'f' 然后 'r' 然后 'i'...)获得 while 循环中断。当没有更多的星号时,我怎么可能让它崩溃??

我的代码是:

fr = input("What file would you like to open: ")
f = open(fr, 'r')
text = f.read()
x = 0
textsplit = text.split()
guess_list = ''




import random
rand_letter = random.choice(textsplit)

for letter in range(len(textsplit)):
    final_letter = rand_letter.lower()
final_letter = ''.join(x for x in final_letter if x.isalpha())
    
for i in range(len(final_letter)):
    print ('*', end = '')
print ()
while x == 0:
    guess = input("Guess a character: ")
    guess_list += guess
    if guess not in final_letter:
         for char in final_letter:   
            if char in guess_list:
                print (char, end = ''),

            if char not in guess_list:
                print('*', end = '')
         print('')
         print("Incorrect. Try again!")
    else:
        for char in final_letter:   
            if char in guess_list:
                print (char, end = ''),

            if char not in guess_list:
                print('*', end = '')
    if final_letter in guess_list:
        print('')
        print('YOU GOT IT!!!! NIICEE')
        break

任何 help/comment/advice/thoughts 将不胜感激!!

首先,读取文件中的样本词很难复制。在这里,我只是使用了一个预先确定的列表并将其拆分为单词。

接下来,我在这里使用了集合,因为集合对于检查是否已经猜到某些内容或目标词中是否有某个字符很有用。此外,为清楚起见更改了变量名称,final_letter 是一个主要示例。

如果有人猜测一个单词的字符仅部分出现在目标单词中(猜测“if”表示“fond”),这将增加当前进度但报告不正确。如果您想确保字符符合单词的顺序(“niw”不是“win”的有效猜测),这将需要进行一些更改*。

s.update(iterable) 将可迭代对象(列表、集合、生成器等)中的所有内容添加到集合中。 s.issubset(other_set) 检查 s 的所有元素是否在 other_set.

import random
textsplit = "friend win lose hangman".split()
guesses = set()
goal_word = random.choice(textsplit)
goal_set = set(goal_word)
print("".join(["*" for _ in goal_word]))
while True:
    guess = input("Guess a character: ")
    set_guess = set(guess)
    if set_guess.issubset(guesses):
        print("Please try again; you already guessed", guess)
        continue
    guesses.update(list(guess))
    if goal_set.issubset(guesses):
        print('YOU GOT IT!!!! NIICEE')
        break
    progress = ""
    for c in goal_word:
        if c in guesses:
            progress += c
        else:
            progress += "*"
    print(progress)
    if not all((c in goal_set for c in set_guess)):  
        print("Incorrect. Try again!")

*集合是无序的,所以s.issubset(other_set)只关心s的所有元素都在other_set中,因为s和other_set都不不知道他们自己的命令。为了支持排序,请考虑检查猜测的词和目标词之间的相等性。