Python刽子手更换

时间:2015-10-31 19:22:29

标签: python

所以我正在编写一个刽子手程序,而且我很难将当前的猜测显示为带有正确字母的下划线,这些字母猜测取代了下划线。我可以让函数工作一次(这就是insert_letter函数),我知道它只是在每次循环时都替换它,但是我不能在不退出循环的情况下返回新的当前,所以如果有人可以提供另一种方式得到更新的猜测会很棒!

def insert_letter(letter, current, word):
    current = "_" * len(word)
    for i in range (len(word)):
        if letter in word[i]:
             current = current[:i] + letter + current[i+1:]
    return current 



def play_hangman(filename, incorrect):
    words = read_words(filename)
    secret_word = random.choice(words)
    num_guess = 0 
    letters_guessed = set()
    letter = input("Please enter a letter: ") 
    while num_guess < incorrect:
        letter = input() 
        if letter in secret_word:
            current = insert_letter(letter, current, secret_word)
            print(current)  
        else:
            num_guess += 1
            current = "_" * len(secret_word)
            print(current)  
        letters_guessed.add(letter)

1 个答案:

答案 0 :(得分:0)

您没有显示insert_letter()功能的代码,所以我写了一个替代方案 - display_remaining()。试一试:

import random, sys

def play_hangman(filename, incorrect):
    words = read_words(filename)
    secret_word = random.choice(words)
    num_guess = 0 
    letters_guessed = set()
    while num_guess < incorrect:
        letter = input("Please enter a letter: ") 
        letters_guessed.add(letter)
        current = display_remaining(secret_word, letters_guessed)
        print(current)
        if not letter in secret_word:
            print("Incorrect guess.")
            num_guess += 1
        if not '_' in current:
            print("Congratulations! You've won!")
            sys.exit(0)
    print("Sorry. You've run out of guesses. Game over.")

def display_remaining(word, guessed):
    replaced = word[:]
    for letter in word:
        if (not letter == '_') and letter not in guessed:
            replaced = replaced.replace(letter, '_', 1)
    return replaced

def read_words(filename):
    with open(filename, 'rU') as f:
        return [line.strip() for line in f]

if __name__ == '__main__':
    play_hangman('words.txt', 6)

注意:通过此实现,您的文字文件不应包含任何包含下划线字符的单词。