在刽子手游戏中重复的单词

时间:2014-04-02 20:21:41

标签: python

import random
words=["cat", "dog", "animal", "something", "whale", "crocodile", "lion", "summer", "boston", "seattle"]
the_word=random.choice(words)
#print(the_word)
a=len(the_word) #number of letter in the word
c=['_'for i in range(a)]#blanks seperated
blanks=" ".join(c)
print("This is a word with",a,"letter")
print("\t", blanks)
guess=0
while guess<3:
    answer=input("Please enter a letter: ")
    if answer in the_word:
        the_index=the_word.index(answer)#find the index
        c[the_index]=answer
        blanks=" ".join(c)
        print(blanks)
    else:
        guess=guess+1
        print("There is no",answer,"in the word.")

我有两个问题:
第一,我不能透露2个单词,例如夏天,如果用户输入'm',它将只显示第一个字母'm'
第二,当用户输入多个单词时,程序仍然会考虑正确答案。例如:用户输入“nm”表示程序仍然认为正确的“某事”这个词,这个单词就像这样“somethinmg”

2 个答案:

答案 0 :(得分:0)

您可以通过类似

的内容查看answer的长度
if len(answer) != 1:
    print "Please enter just one letter"

或者你只需​​要输入他们输入的第一个字母

letter = answer[0]

有关如何查找匹配的多个索引,请参阅How to find all occurrences of an element in a list?

答案 1 :(得分:0)

好的首先要做显示我会接受这个词,将它分成字母,然后创建一个包含所有&#39; _&#39;的相同长度的列表。这样你就可以通过调用&#39;来显示_ _ _ _等。 &#39;。加入(substitutelist)......

获得多封信回复: 每次猜测

for letter in range(len(word)):
    if word[letter]==guess.lower():
        substitutelist[letter]=guess.lower()

然后,每次打电话时,我都会将其添加到名为“&#34; USED&#34;并检查每个猜测,以确保它不是zip(单词,使用),如果它返回一个消息错误。

这是我编写的一个示例hangman代码,用于显示不同的函数......

import re, sys
from random import choice

def showmap(hangmanpic):
    """Will show the hangman pic after subtracting any
    characters holding the place of a future body part"""
    tempmap=''
    x=str(range(7))
    for i in hangmanpic:
        if i in x:
            tempmap+=' '
        else:
            tempmap+=i
    return tempmap

def addbodypart(remaining, hangmanmap):
    """takes the hangman map and substitutes in a body
    part when a wrong answer is chosen.  Returns the new
    hangmanmap"""
    bodyparts={'6':'(_)',
           '5':'|',
           '3':'\\\\',
           '2':'\\\\',
          '4':'/',
           '1':'/'
          }
    return re.sub(str(remaining), bodyparts[str(remaining)], hangmanmap)

def StartGame(hangmanmap, word):
    """Starts the game"""
    dashword, wrong=[], []
    remaining=6
    for i in word:
        dashword.append('_')
    while remaining>0:
        if '_' not in dashword:
            remaining=0
            continue
        for i in range(5):
            print ""
        print "Guesses Left = %d" %(remaining)
        print showmap(hangmanmap)
        print ""
        print "Used Letters: %s" %(', '.join(wrong))
        print "Word: %s"%(' '.join(dashword))
        guess=str(raw_input('Guess a letter:')).lower()
        if guess in str(wrong)+str(dashword):
            print ""
            print "Sorry but you have already guessed that letter.  Please guess again."
            print ""
            continue
        if guess not in word:
            hangmanmap=addbodypart(remaining, hangmanmap)
            remaining-=1
            wrong.append(guess)
        else:
            for i in range(0, len(word)):
                if word[i]==guess:
                    dashword[i]=guess
    if '_' not in dashword:
        for i in range(5):
            print ""
        print "You WIN!  Congrats"
        print "The word was %s" %(word)
        print showmap(hangmanmap)
        print "Used Letters: %s" %(', '.join(wrong))
        print "Word: %s"%(' '.join(dashword))
    else:
        for i in range(5):
            print ""
        print showmap(hangmanmap)
        print "Word: %s" %(word)
        print "Sorry but you've ran out of guesses! You Lose!  The correct word was %s" %(word)

def main():
    word=str(choice([line.strip() for line in open(sys.argv[1])])).lower()
    hangmanmap="""          _________
          |/      |
          |      6
          |      354
          |       5
          |      1 2
          |
       ___|___"""

    print "Welcome to AmazingReds Hangman Game!"
    print "6 wrong answers and YOU LOSE!  Good Luck."
    StartGame(hangmanmap, word)
if __name__ == '__main__':
    main()