有人可以用刽子手帮助我吗?

时间:2011-04-30 02:06:25

标签: python console

我正在使用python 2.7.1制作一个刽子手游戏。我试图让用户在游戏结束前选择是否重播。我试图使用变量keep_playing,但它不起作用。 另外,在guesses=word_len * ['_']中,我想在下划线之间留一个空格,因为如果它们粘在一起,我就看不到剩下多少个字母了。这是我的刽子手代码:

from random import *
import os


keep_playing = True
def print_game_rules(max_incorrect,word_len):
    print"you have only 7 chances to guess the right answer"
    return

def get_letter():
    print
    letter = raw_input("Guess a letter in the mystery word:") 
    letter.strip()
    letter.lower()
    print
    os.system('cls')
    return letter
def display_figure(hangman):
    graphics = [
    """
        +--------+
         |
         |
         |
         |
         |
         |
     ====================
    """,
    """
        +-------
        |      o
        |
        |
        |
        |
    ====================
    """,
    """
        +-------
        |      o
        |      +   
        |      |
        |
        |
    ======================
    """,
    """
        +-------
        |       o
        |    ---+
        |       |
        |    
        |  
        |   
    =====================
    """,
    """
        +-------
        |       o
        |    ---+---
        |       |
        |        
        |         
        |     
        |
    =====================
    """,
    """
        +-------
        |       o
        |    ---+---
        |       |
        |      / 
        |     /   
        |    /     
        |     
    =====================
    """,
    """
        +-------
        |       o
        |    ---+---
        |       |
        |      / \   
        |     /   \  
        |    /     \    
        |     
    =====================
    """]

    print graphics[hangman]
    return



animals=["horse","donkey","dinosaur","monkey","cat","aligator","butterfly","buffallo","dragon"]
word=choice(animals)
word_len=len(word)
guesses=word_len * ['_']
max_incorrect=6
alphabet="abcdefghijklmnopqrstuvxyz"
letters_tried=""
number_guesses=0
letters_correct=0
incorrect_guesses=0


print_game_rules(max_incorrect,word_len)
while (incorrect_guesses != max_incorrect) and (letters_correct != word_len):
    letter=get_letter()
    if len(letter)==1 and letter.isalpha():
        if letters_tried.find(letter) != -1:
            print "You already picked", letter
        else:
            letters_tried = letters_tried + letter
            first_index=word.find(letter)
            if  first_index == -1:
                incorrect_guesses= incorrect_guesses +1
                print "The",letter,"is not the mystery word."
            else:
                print"The",letter,"is in the mystery word."
                letters_correct=letters_correct+1
                for i in range(word_len):
                    if letter == word[i]:
                        guesses[i] = letter

    else:
        print "Please guess a single letter in the alphabet."
    display_figure(incorrect_guesses)

    print ''.join(guesses)
    print "Letters tried so far: ", letters_tried
    if incorrect_guesses == max_incorrect:
        print "Sorry, too many incorrect guesses. You are hanged."
        print "The word was",word
        keep_playing = False
    if letters_correct == word_len:
        print "You guessed all the letters in the word!"
        print "The word was",word
        keep_playing = False



while keep_playing == False:
    user = raw_input("\n\tShall we play another game? [y|n] ")
    again = "yes".startswith(user.strip().lower())
    if again:
        keep_playing = True
    if not again:
        break

raw_input ("\n\n\nPress enter to exit")

2 个答案:

答案 0 :(得分:3)

print ''.join(guesses)可以转换为print ' '.join(guesses),在字母之间留出空格

你需要在keep_playing = False之前做while keep_playing == False:并且主游戏循环应该在一个从这个循环中调用的函数if keep_playing == True:

答案 1 :(得分:1)

以下将做你想做的事。

from random import *
import os


keep_playing = True
def print_game_rules(max_incorrect,word_len):
    print"you have only 7 chances to guess the right answer"
    return
def get_letter():
    print
    letter = raw_input("Guess a letter in the mystery word:") 
    letter.strip()
    letter.lower()
    print
    os.system('cls')
    return letter
def display_figure(hangman):
    graphics = [
    """
        +--------+
         |
         |
         |
         |
         |
         |
     ====================
    """,
    """
        +-------
        |      o
        |
        |
        |
        |
    ====================
    """,
    """
        +-------
        |      o
        |      +   
        |      |
        |
        |
    ======================
    """,
    """
        +-------
        |       o
        |    ---+
        |       |
        |    
        |  
        |   
    =====================
    """,
    """
        +-------
        |       o
        |    ---+---
        |       |
        |        
        |         
        |     
        |
    =====================
    """,
    """
        +-------
        |       o
        |    ---+---
        |       |
        |      / 
        |     /   
        |    /     
        |     
    =====================
    """,
    """
        +-------
        |       o
        |    ---+---
        |       |
        |      / \   
        |     /   \  
        |    /     \    
        |     
    =====================
    """]

    print graphics[hangman]
    return

while keep_playing:
    animals=["horse","donkey","dinosaur","monkey","cat","aligator","butterfly","buffallo","dragon"]
    word=choice(animals)
    word_len=len(word)
    guesses=word_len * ['_']
    max_incorrect=6
    alphabet="abcdefghijklmnopqrstuvxyz"
    letters_tried=""
    number_guesses=0
    letters_correct=0
    incorrect_guesses=0
    print_game_rules(max_incorrect,word_len)

    while (incorrect_guesses != max_incorrect) and (letters_correct != word_len):
        letter=get_letter()
        if len(letter)==1 and letter.isalpha():
            if letters_tried.find(letter) != -1:
                print "You already picked", letter
            else:
                letters_tried = letters_tried + letter
                first_index=word.find(letter)
                if  first_index == -1:
                    incorrect_guesses= incorrect_guesses +1
                    print "The",letter,"is not the mystery word."
                else:
                    print"The",letter,"is in the mystery word."
                    letters_correct=letters_correct+1
                    for i in range(word_len):
                        if letter == word[i]:
                            guesses[i] = letter
        else:
            print "Please guess a single letter in the alphabet."

        display_figure(incorrect_guesses)
        print ' '.join(guesses)
        print "Letters tried so far: ", letters_tried

        if incorrect_guesses == max_incorrect:
            print "Sorry, too many incorrect guesses. You are hanged."
            print "The word was",word
            break
        if letters_correct == word_len:
            print "You guessed all the letters in the word!"
            print "The word was",word
            break

    user = raw_input("\n\tShall we play another game? [y|n] ")
    again = "yes".startswith(user.strip().lower())
    if again:
        keep_playing = True
    else:
        break

raw_input ("\n\n\nPress enter to exit")