python中的hangman仅使用while循环
我正在尝试创建一个仅使用while循环的刽子手游戏: 我试图显示一个秘密单词的破折号,或者如果字母被猜到并且是可变的,那么正确的字母将在正确的位置显示正确的字母,其余的将是破折号——所有这些都使用while循环 但是,如果字符串正确的字母是空的,就像在游戏开始时一样,只显示破折号 我不允许使用for loops或in,while loops和当前出现以下错误: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
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 ('_')