簡體   English   中英

Python中的Hangman游戲問題

[英]Hangman game problems in Python

這是我完整的代碼:

import random
guessesMade = 0
lives_remaining = 8
roundsPlayed = 0
roundsWon = 0
guessed_letters = ''
words = ['chicken', 'dog', 'cat', 'mouse', 'frog']

def pick_a_word():
    word_position = random.randint(0, len(words) - 1)
    return words[word_position]
    print(pick_a_word())

def play():
    print('Welcome to hangman! The rules are simple: A word will be chosen at random and will be represented by a sequence of blanks. Each blank constitutes a letter in the word. You will be asked to enter a letter and if the letter is contained in the word you will be notified. You can only make an incorrect guess 8 times before you lose the round. To win the round you must guess all the letters and reveal the word. Good luck!\n\n')
    word = pick_a_word()
    while True:
        guess = get_guess(word)
        if process_guess(guess,word):
            print('You won.')
            break
        elif lives_remaining == 0:
            print("\nI'm sorry, but you have run out of guesses. The word was {}.".format(randWord))
            break

def get_guess(word):
    print_word_with_blanks(word)
    print('Lives Remaining: ' + str(lives_remaining))
    guess = input('Guess a letter or the word if you know it.')
    return guess

def print_word_with_blanks(word):
    display_word=''
    for letter in display_word:
        if guessed_letters.find(letter) > -1:
            display_word = display_word + letter
        else:
            display_word = display_word + '-'
    print(display_word)

def process_guess(guess,word):
    if len(guess) > 1 and len(guess == len(word)):
        return whole_word_guess(guess,word)
    else:
        return single_letter_guess(guess, word)

def whole_word_guess(guess,word):
    global guessesLeft
    if guess.lower() == word.lower():
        return True
    else:
        guessesLeft -=1
        return False

def single_letter_guess(guess,word):
    global guessed_letters
    global lives_remaining
    if word.find(guess) == -1:
        lives_remaining -= 0
    guessed_letters = guessed_letters + guess.lower()
    if all_letters_guessed(word):
        return True
    return False

def all_letters_guessed(word):
    for letter in word:
        if guessed_letters.find(letter.lower()) == -1:
            return False
        return True
play()

抱歉,代碼塊很大,但是我想看看完整程序,以幫助糾正我的錯誤。 到目前為止,一旦調用一次游戲,當我輸入一個字母時,它就只會繼續打印“剩余的8個生命:”。幾個字母之后,它只會打印出“您贏了”。 我無法發現自己​​的錯誤,因此python專家的任何幫助將不勝感激。

在此功能中:

def print_word_with_blanks(word):
    display_word=''
    for letter in display_word:
        if guessed_letters.find(letter) > -1:
            display_word = display_word + letter
        else:
            display_word = display_word + '-'
    print(display_word)

您將忽略作為參數傳入的word ,並遍歷顯示為空的display_word 因此,實際的單詞(帶空格)根本不會被打印出來。

想必您的意思是說:

    for letter in word:
        ...

或者,您可以更簡潔地編寫它:

def print_word_with_blanks(word):
    print(''.join(c if c in guessed_letters else '-' for c in word))

您遇到的另一個問題是在這里:

def all_letters_guessed(word):
    for letter in word:
        if guessed_letters.find(letter.lower()) == -1:
            return False
        return True

縮進的方式,它總是在循環的第一次迭代中返回true或false。 應該是這樣的:

def all_letters_guessed(word):
    for letter in word:
        if guessed_letters.find(letter.lower()) == -1:
            return False
    return True

因此,只有在整個循環結束后才return True

還是更好:

def all_letters_guessed(word):
    return all(c.lower() in guessed_letters for c in word)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM