更新刽子手游戏中的遗失字母

时间:2016-10-17 18:25:10

标签: python set

我正在制作一个刽子手游戏并且发现我的方法有问题需要更新答案。我有一个变量,它将下划线添加到玩家需要猜测的单词中的字母数量。但是当玩家猜到一个正确的字母时,我无法弄清楚如何有效地更新它。

这是我的代码

import random
'''
HANGMAN IMAGE

print(" _________     ")
print("|         |    ")
print("|         0    ")
print("|        /|\\  ")
print("|        / \\  ")
print("|              ")
print("|              ")
'''

def game():
    print('''Welcome to hangman, you must guess letters to fill in the word.
Incorrect guesses will use up a turn, you have 7 turns before you lose.''')
    lines = open("wordBank.txt").read() 
    line = lines[0:] 

    words = line.split() 
    myword = random.choice(words).lower()
    letters = len(myword)
    print("Your word has " + str(letters) + " letters.")

    underscores = ""
    for x in range(0, letters):
        underscores += "_ "
    print(underscores)
    print(myword)
    l = set(myword)
    turn = 0
    guesses = []
    def guess():
        thisGuess = input("Type a letter and press Enter(Return) to guess: ")
        if thisGuess.lower() in l:

        else:
            print("Boo")

    guess()
game()

2 个答案:

答案 0 :(得分:2)

您可能需要重新提问,因为您不清楚自己在问什么。但你应该看看字符串拼接。如果他们猜到字母“a”并且它进入第三个插槽那么你可以做类似的事情

underscores[:2] + 'a' + underscores[3:]

适应您的代码但是会用“a”替换第3个下划线。

更新: 不要使用集合,随时查找索引。试试这样的事情

for index, letter in enumerate(my_word):
  if letter == guessed_letter:
    if not index == len(my_word) -1
      underscores = underscores[:index] + letter + underscores[index+1:]
    else:
      underscores = undescores[:-1] + letter

答案 1 :(得分:1)

另一种可能的方法(在Python 2.7中,见下面的3):

trueword = "shipping"
guesses = ""

def progress():
    for i in range(len(trueword)):
        if trueword[i] in guesses:
            print trueword[i],
        else:
            print "-",
    print ""

这可以通过检查每个字母是否已被猜到in guesses并打印该字母来起作用。如果没有猜到,则会打印-。当您在打印结束时放置逗号(如print "-",)时,它不会自动打印换行符,因此您可以继续在同一行上打印。 print ""打印带有换行符的空字符串,完成该行。

然后猜测变成:

guesses += guess

输出是:

猜测= ''

- - - - - - - -

猜测= 'sip'

s - i p p i - -

在Python 3中:

trueword = "shipping"
guesses = ""

def progress():
    for i in range(len(trueword)):
        if trueword[i] in guesses:
            print(trueword[i], end='')
        else:
            print("-", end='')
    print('')

添加end=''参数以删除换行符,而不是逗号。如果您想要它们之间的空格,您也可以添加sep=' '来指定分隔符。

另外,因为列表理解很棒(这在2.7& 3中有效):

def progress():
    ans = [word[x] if word[x] in guesses else '-' for x in range(len(word))]
    print(' '.join(ans))

通过list comprehensions做同样的事情......这是python中非常强大的功能。