检查 word 中的字母是否都在字符串 Hangman 中

Check if letters from word are all in string Hangman

我正在尝试在 Python 中创建一个简单的刽子手游戏。我想对于初学者来说我已经走了很远:) 我唯一无法完成的是检查是否真的猜到了这个词。我需要检查是否所有的字母实际上都在我创建的列表中,但我不确定如何。 我确实意识到有一个关于这个的话题,但这对我没有帮助。

import random

with open('randomlist.txt') as bestand:
woordenlijst = bestand.read().splitlines()

print("Welcome to Hangman.")
naam = input("What is your name? ")
print("Hello", naam, ", the computer selecter a secret word.")

woord = random.choice(woordenlijst)
lengte_woord = len(woord)
ingevoerde_letters = []

galg = []

i = 0

print("The length of the word is: \n")
while i < lengte_woord:
    print("_", end=" ")
    i = i + 1

levens = 0
invoer = " "

print(woord)

while levens <= 10:
    letter = input("Letter: ")
    if letter in ingevoerde_letters:
        print("You already tried this letter.")
    elif letter in woord:
        print("This letter is in the word. We'll fill it in for you.")
        i = 0
        while i < lengte_woord:           
            if woord[i] == letter:
                print(letter, end=" ")
                ingevoerde_letters.append(letter)
                i = i + 1
            elif woord[i] in ingevoerde_letters:
                print(woord[i], end=" ")
                i = i + 1
            else:
                print("_", end=" ")
                i = i + 1                            
    else:
        ingevoerde_letters.append(letter)
        print("This letter is not in the word", galg[levens])
        levens = levens + 1       
print(galg[10], "\nGame over!")                 

您已经掌握了确定这一点所需的大部分内容,虽然有更有效的方法来完成您所做的事情(查看 Python 中的集合),但以下方法可以正常工作:

# Somewhere towards the top of the script
total_letters_guessed = 0

...

while levens <= 10:
    ...
    if woord[i] == letter:
        print(letter, end=" ")
        ingevoerde_letters.append(letter)
        i = i + 1
        total_letters_guessed += 1

    ...

    # Before your loop ends
    if total_letters_guessed == lengte_woord:
        print("You won!")

您的代码中存在一些问题。例如,当猜错一个字母时,这个字母永远不会添加到您稍后用于打印错误猜测的 galg 列表中。因此,要么将 galg 替换为 ingevord_letter,要么将字母添加到 ingevord_letter 和 galg。像这样:

else:
    ingevoerde_letters.append(letter)
    galg.append(letter)

第二期在您阅读的文件中。当你说 .splitline() 时,你让 woord 包含整行(或包含在 \n 之间的所有内容)。我想你想要 .split() 而不是从文本中选择 1 个随机单词。

对于您的实际问题,在成功猜测后完成游戏的一种方法是对照单词中的字母集合检查字母集合。请参阅 isWon 函数。

import random
def isWon(mysteryWord, lettersGuessed):
    return set(lettersGuessed) == set(mysteryWord)

with open('randomlist.txt') as bestand:
    woordenlijst = bestand.read().splitlines()

print("Welkom bij Galgje, voor we beginnen willen we graag het volgende aan je vragen.")
naam = input("Wat is je naam? ")
print("Hallo", naam, ", leuk dat je wilt spelen. De computer heeft een willekeurig woord voor je geselecteerd.")

woord = random.choice(woordenlijst)
lengte_woord = len(woord)
ingevoerde_letters = []

galg = []

i = 0

print("De lengte van het woord is: \n")
while i < lengte_woord:
    print("_", end=" ")
    i = i + 1

levens = 0
invoer = " "

print(woord)

while levens <= 10:
    letter = input("Geef een letter: ")
    if letter in ingevoerde_letters:
        print("Deze letter heb je al ingevoerd.")
    elif letter in woord:
        print("Deze letter zit in het woord. We vullen het voor je in.")
        i = 0
        while i < lengte_woord:           
            if woord[i] == letter:
                print(letter, end=" ")
                ingevoerde_letters.append(letter)
                i = i + 1
            elif woord[i] in ingevoerde_letters:
                print(woord[i], end=" ")
                i = i + 1
            else:
                print("_", end=" ")
                i = i + 1           
    else:
        ingevoerde_letters.append(letter)
        galg.append(letter)
        print("Deze letter zit niet in het woord", galg[levens])
        levens = levens + 1  
    if (isWon(ingevoerde_letters, woord)):
      #successfull code here
      break
print(galg, "\nGame over!")