检查来自单词的字母是否全部在字符串Hangman

时间:2017-12-05 19:54:23

标签: python list function words

我试图在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!")                 

2 个答案:

答案 0 :(得分:0)

你拥有确定这一点所需要的大部分内容,虽然有更有效的方法可以完成你所做的事情(在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!")

答案 1 :(得分:0)

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

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

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

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

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!")