如何使用python在hangman中两次获得相同的单词

如何使用python在hangman中两次获得相同的单词,python,Python,这是我的代码,我认为所有的东西都可以工作,除了它不需要任何超过一个的值。请帮帮我 word=input(“你的单词是什么?\n”).upper() forguess=“.join(单词) char=“"” 对于范围内的索引(len(word)): word=word[:index]+char+word[index+1:] spacedwords=“”.join(word) 打印(空格单词) 机会=5 当机会来临时!=0: 打印(“您有”+str(机会)+“剩余机会”\n”) 字母=输入(“猜测

这是我的代码,我认为所有的东西都可以工作,除了它不需要任何超过一个的值。请帮帮我

word=input(“你的单词是什么?\n”).upper()
forguess=“.join(单词)
char=“"”
对于范围内的索引(len(word)):
word=word[:index]+char+word[index+1:]
spacedwords=“”.join(word)
打印(空格单词)
机会=5
当机会来临时!=0:
打印(“您有”+str(机会)+“剩余机会”\n”)
字母=输入(“猜测字母:\n”)。上限()
如果字母为forguess:#检查输入的字母是否为原始单词
pos=forguess.index(字母)#从forguess原始单词获取字母位置
空格词=空格词[ PoS] +字母+空格词[ POS + 1:]代替空白单词
打印(空格单词)
如果spacedwords==放弃:
打印(“你赢了!!!”)
打破
其他:
机会-=1
如果机会==0:

打印(“你松开了!!!”
你的代码不起作用的主要原因是,当你猜一个字母时,
空格单词会改变,
放弃了它。这样,您的
索引
调用总是只查找第一个出现的
字母
。尝试尽可能少地修改代码(有更有效的方法可以做到这一点),下面是一个如何实现所需的示例:

word = input("What's your word?\n").upper()
forguess = " ".join(word)
char = "_"
for index in range(len(word)):
    word = word[:index] + char + word[index+1:]
spacedwords = " ".join(word)
print(spacedwords)

chances = 5

while chances != 0:
    print("You have " + str(chances) + " chances left\n")
    letter = input("Guess the letters: \n").upper()
    if letter in forguess:              #check if the input letter is in original word
        positions = [i for i,x in enumerate(forguess) if x == letter]    #gets all letter positions from forguess original word
        for pos in positions:
            spacedwords = spacedwords[:pos] + letter + spacedwords[pos+1:]  #replace all blank positions with letter
        print(spacedwords)
        if spacedwords == forguess:
            print("YOU WON!!!")
            break
    else:
        chances -= 1
        if chances == 0:
            print("YOU LOOSE!!!")
编辑

我第一次误解了OP的意图,这里又是一个试图尽可能少地修改原始代码的示例。我引入了一个新变量
original
,它在开始时与
forguess
相同。现在,每次正确猜测一个字母时,
forguess
都会被修改(猜测的字母将更改为
NULL
字符),以便在下次搜索中不会再次显示该字母。然后,最后将
空格词
原始
进行比较,而不是

word = input("What's your word?\n").upper()
forguess = " ".join(word)
original = " ".join(word)
char = "_"
for index in range(len(word)):
    word = word[:index] + char + word[index+1:]
spacedwords = " ".join(word)
print(spacedwords)

chances = 5

while chances != 0:
    print("You have " + str(chances) + " chances left\n")
    letter = input("Guess the letters: \n").upper()
    if letter in forguess:              #check if the input letter is in original word
        pos = forguess.index(letter)   #gets the letter position from forguess original word
        spacedwords = spacedwords[:pos] + letter + spacedwords[pos+1:]  #replace word in the blank ones
        forguess = forguess[:pos] + chr(0) + forguess[pos+1:]

        print(spacedwords)
        if spacedwords == original:
            print("YOU WON!!!")
            break
    else:
        chances -= 1
        if chances == 0:
            print("YOU LOOSE!!!")
注意


如果您将
forguess
转换为单个字符列表,整个问题将更容易处理。

代码不起作用的主要原因是,当您猜测字母时,
forguess
会发生变化,而
forguess
则不会。这样,您的
索引
调用总是只查找第一个出现的
字母
。尝试尽可能少地修改代码(有更有效的方法可以做到这一点),下面是一个如何实现所需的示例:

word = input("What's your word?\n").upper()
forguess = " ".join(word)
char = "_"
for index in range(len(word)):
    word = word[:index] + char + word[index+1:]
spacedwords = " ".join(word)
print(spacedwords)

chances = 5

while chances != 0:
    print("You have " + str(chances) + " chances left\n")
    letter = input("Guess the letters: \n").upper()
    if letter in forguess:              #check if the input letter is in original word
        positions = [i for i,x in enumerate(forguess) if x == letter]    #gets all letter positions from forguess original word
        for pos in positions:
            spacedwords = spacedwords[:pos] + letter + spacedwords[pos+1:]  #replace all blank positions with letter
        print(spacedwords)
        if spacedwords == forguess:
            print("YOU WON!!!")
            break
    else:
        chances -= 1
        if chances == 0:
            print("YOU LOOSE!!!")
编辑

我第一次误解了OP的意图,这里又是一个试图尽可能少地修改原始代码的示例。我引入了一个新变量
original
,它在开始时与
forguess
相同。现在,每次正确猜测一个字母时,
forguess
都会被修改(猜测的字母将更改为
NULL
字符),以便在下次搜索中不会再次显示该字母。然后,最后将
空格词
原始
进行比较,而不是

word = input("What's your word?\n").upper()
forguess = " ".join(word)
original = " ".join(word)
char = "_"
for index in range(len(word)):
    word = word[:index] + char + word[index+1:]
spacedwords = " ".join(word)
print(spacedwords)

chances = 5

while chances != 0:
    print("You have " + str(chances) + " chances left\n")
    letter = input("Guess the letters: \n").upper()
    if letter in forguess:              #check if the input letter is in original word
        pos = forguess.index(letter)   #gets the letter position from forguess original word
        spacedwords = spacedwords[:pos] + letter + spacedwords[pos+1:]  #replace word in the blank ones
        forguess = forguess[:pos] + chr(0) + forguess[pos+1:]

        print(spacedwords)
        if spacedwords == original:
            print("YOU WON!!!")
            break
    else:
        chances -= 1
        if chances == 0:
            print("YOU LOOSE!!!")
注意


如果您将
forguess
转换为单个字符列表,整个问题将更容易处理。

现在就写,修改后的代码将同时给出所有字母。有没有一种方法可以让它一次单一化?哦,好吧,我误解了代码应该如何工作。我将相应地调整解决方案。非常感谢@Thomas。我是初学者,只是在玩代码。你的帮助意义重大。现在就写吧,你修改的代码将同时给出所有的字母。有没有一种方法可以让它一次单一化?哦,好吧,我误解了代码应该如何工作。我将相应地调整解决方案。非常感谢@Thomas。我是初学者,只是在玩代码。你的帮助意义重大。