python中的hangman仅使用while循环

python中的hangman仅使用while循环,python,python-3.5,Python,Python 3.5,我正在尝试创建一个仅使用while循环的刽子手游戏: 我试图显示一个秘密单词的破折号,或者如果字母被猜到并且是可变的,那么正确的字母将在正确的位置显示正确的字母,其余的将是破折号——所有这些都使用while循环 但是,如果字符串正确的字母是空的,就像在游戏开始时一样,只显示破折号 我不允许使用for loops或in,while loops和当前出现以下错误: tmp_letter = p_correct_letters[count] IndexError: string index out o

我正在尝试创建一个仅使用while循环的刽子手游戏:

我试图显示一个秘密单词的破折号,或者如果字母被猜到并且是可变的,那么正确的字母将在正确的位置显示正确的字母,其余的将是破折号——所有这些都使用while循环

但是,如果字符串正确的字母是空的,就像在游戏开始时一样,只显示破折号

我不允许使用for loops或in,while loops和当前出现以下错误:

tmp_letter = p_correct_letters[count]
IndexError: string index out of range
我的代码:

from hangman_lib import HANGMAN
import hangman_lib
import random


words = ["ant","baboon","zebra"]

def main():
    game_over = False
    correct_letters = ""
    incorrect_letters = ""

    secret_word = get_word()
    print("Welcome to Hangman!")
    print(secret_word) # For testing purposes only

    while not game_over:
        display_board(secret_word, correct_letters, incorrect_letters)

        guess = get_guess(correct_letters + incorrect_letters)

        if found_letter(guess, secret_word):
            correct_letters = correct_letters + guess
        else:
            incorrect_letters = incorrect_letters + guess

        game_over = has_won(secret_word, correct_letters)

        if not game_over:
            game_over = has_lost(incorrect_letters)

        if game_over:
            display_board(secret_word, correct_letters, incorrect_letters)


''' Non temlate Code starts here '''

# Function returns random word from list of words
def get_word():
    return random.choice(words)

def display_board(p_secret_word, p_correct_letters, p_incorrect_letters):
    print(HANGMAN[len(p_incorrect_letters)])
    print("\n")

    print ("Guess a letter... ")

    word_length = len(p_secret_word)
    underscore = "_ "
    to_display = ""

    display_underscore = underscore * word_length
    print(display_underscore)

    print("\n")
    print("Incorrect letters:", p_incorrect_letters)

    index = 0
    current_letter =""
    tmp_letter =""
    correct_length = len(p_correct_letters)


    while index < word_length:
        current_letter = p_secret_word[index]
        count = 0

        while count < correct_length:
            tmp_letter = p_correct_letters[count]

            if current_letter == tmp_letter:
                to_display = to_display[count] + current_letter + " "
            else:
                to_display = underscore + " "

        count = count + 1

    index = index + 1

    print(to_display, end = "")

    # return current print statement 

    main()
从hangman_lib导入hangman
进口刽子手库
随机输入
单词=[“蚂蚁”、“狒狒”、“斑马”]
def main():
游戏结束=错误
更正字母=“”
不正确的字母=“”
秘密单词=获取单词()
打印(“欢迎来到刽子手!”)
打印(机密文字)#仅用于测试目的
虽然游戏尚未结束:
显示板(机密字、正确字母、错误字母)
猜测=获得猜测(正确字母+错误字母)
如果发现字母(猜测,秘密单词):
正确字母=正确字母+猜测
其他:
不正确的字母=不正确的字母+猜测
游戏结束=赢了(秘密单词、正确字母)
如果游戏没有结束:
游戏结束=输了(字母不正确)
如果游戏结束:
显示板(机密字、正确字母、错误字母)
''非临时代码从此处开始''
#函数从单词列表中返回随机单词
def get_word():
返回random.choice(单词)
def显示板(密码字、正确字母、错误字母):
打印(刽子手[len(p\u不正确的字母)])
打印(“\n”)
打印(“猜一个字母…”)
单词长度=len(p_secret_单词)
下划线“\”
to_display=“”
显示下划线=下划线*字长
打印(显示下划线)
打印(“\n”)
打印(“不正确的字母:”,p_不正确的字母)
索引=0
当前字母=“”
tmp_字母=“”
正确长度=长度(p\U正确字母)
而索引<字长:
当前字母=密码字[索引]
计数=0
计数<正确长度时:
tmp_字母=p_正确字母[计数]
如果当前字母==tmp字母:
to_display=to_display[计数]+当前字母+“”
其他:
显示的步骤=下划线+“”
计数=计数+1
索引=索引+1
打印(至_显示,结束=“”)
#返回当前打印语句
main()

在python中,中的
有两个主要用途,用于迭代可重用项,以及确定列表或集合中的成员身份

第一个用例(迭代)可以用另一个循环结构代替,如
while
,您已经完成了

第二个用例(成员资格测试)可以使用嵌套循环或使用
集合
列表
上的内置成员资格方法之一来完成

例如,在
display_板
函数中,底部的
while
循环看起来像是试图显示秘密单词,正确猜测打印字母,未使用的字母打印下划线。您得到的错误是迭代超过
correct\u letters
列表末尾的结果

为此,您需要:

  • 循环浏览秘密单词中的每个字母
  • 对于秘密单词中的每个字母,测试该字母是否是正确的猜测之一。如果猜测正确,则显示字母;如果猜测不正确,则显示下划线
  • 第一步可以通过
    while
    循环完成

    i = 0
    while i < len(word):
       # do stuff
       i += 1
    
    我认为
    集合
    在这里工作得更好,但是如果保持猜测字母的顺序很重要,您也可以使用
    列表

    correct_letters = ['a', 'b', 'c']
    
    if correct_letters.count(letter)
        print (letter)
    else:
        print ('_')
    

    你的缩进。有跑了。Wild。此外,您不能“返回当前打印语句”。我会编写自己的函数,在
    while
    方面模拟
    for
    ,然后使用它。实际上,不允许
    for
    除了让你意识到
    for
    有多有用之外,对任何事情都是毫无用处的。你可以用for循环编写解决方案,然后用一段时间机械地替换每个for循环。缩进是疯狂的!我正在粘贴我的代码,必须手动添加额外的空间,以便它显示在这里;(我更新了我的代码,现在它什么也不打印,即使我在正确的字母列表中添加了a、e、I、o、u:(你对代码更新了什么?你尝试过我提供的任何建议吗?看起来你仍然在使用字符串来存储正确的字母,而不是一组。你仍然在错误地迭代正确的字母。)(迭代到最后)。我刚刚更新了,抱歉,在我完成每次迭代编辑代码之前发布了评论,您可能应该执行
    来显示+=
    ,而不是每次重新定义它。
    correct_letters = ['a', 'b', 'c']
    
    if correct_letters.count(letter)
        print (letter)
    else:
        print ('_')