python - 我的刽子手程序卡在要求输入而不是打印我猜的任何字母
问题描述
我对编程很陌生,我尝试制作一个像刽子手这样的程序。但是我只是不知道为什么它不起作用。它所做的只是要求输入,然后什么也不做。输入只是一遍又一遍地循环,无论我输入什么都没有改变。也欢迎任何关于如何改进我的代码的提示,我觉得我在这里犯了很多错误。
import random
word_list = ["car", "house", "shop", "shoes", "tractor", "microphone", "camera"]
game_state = True
blank_spaces = []
word_picked = ""
already_guessed = []
word_letters = []
def Word_picker():
word_number = random.randint(0, (len(word_list) - 1))
word_picked = word_list[word_number]
word_picked = word_picked.lower()
word_letters = [char for char in word_picked]
print("\n")
print(word_picked)
print(word_letters)
print("\n")
for char in word_letters:
blank_spaces.append("_ ")
def Printer():
print("\n \n")
for x in range(len(blank_spaces)):
print(blank_spaces[x], end='')
def Main():
guessed_letter = input("Try a letter:")
guessed_letter = guessed_letter.lower()
if guessed_letter in already_guessed:
print("You've already tried this letter. Try a different one. \n")
Main()
for z in word_letters:
if guessed_letter == word_letters[z]:
blank_spaces[z] = guessed_letter + " "
already_guessed.append(guessed_letter)
Main()
else:
print("Incorrect.")
already_guessed.append(guessed_letter)
Main()
def Already_guessed():
for a in already_guessed:
print("Already guessed letters:" + already_guessed[a] + ", ", end='')
Word_picker()
Printer()
while game_state:
Already_guessed()
Printer()
Main()
解决方案
我做了一些改变:
正如@Barmar 指出的那样,您永远不会返回该
Main()
函数。我现在循环调用该函数,直到 gam_state 更改为 False。@Barmar 还指出,您正在使用
z
as 索引,它为您提供IndexError
.z
已经是already_guessed[i]
,所以你不需要那个。您只是在本地更改列表
Word_picker
,这不起作用。我将其更改为返回相应的单词,现在您可以从Main()
函数中访问这些单词。您在 for 循环中在单词的所有字母上添加了猜测的字母,这并没有破坏您的代码,但它使输出变得可怕,并且更多的猜测会导致您的代码变得不必要的慢。
然后对您的输出进行一些更改,以便您只在循环之外打印文本,等等。
import random
word_list = ["car", "house", "shop", "shoes", "tractor", "microphone", "camera"]
game_state = True
blank_spaces = []
word_picked = ""
already_guessed = []
word_letters = []
def Word_picker():
w_number = random.randint(0, (len(word_list) - 1))
w_picked = word_list[w_number]
w_picked = w_picked.lower()
w_letters = [char for char in w_picked]
print("\n")
print(w_picked)
print(w_letters)
print("\n")
b_spaces = []
for char in w_letters:
b_spaces.append("_ ")
print(b_spaces)
return b_spaces, w_picked, w_letters
def Printer():
print("\n \n")
for x in range(len(blank_spaces)):
print(blank_spaces[x], end='')
def Main():
guessed_letter = input("Try a letter:")
guessed_letter = guessed_letter.lower()
print(already_guessed)
if guessed_letter in already_guessed:
print("You've already tried this letter. Try a different one. \n")
for i, z in enumerate(word_letters):
if guessed_letter == z:
blank_spaces[i] = guessed_letter + " "
else:
print("Incorrect.")
already_guessed.append(guessed_letter)
def Already_guessed():
print("Already guessed letters:")
for a in already_guessed:
print(a)
blank_spaces, word_picked, word_letters = Word_picker()
Printer()
while game_state:
Already_guessed()
Printer()
Main()
未来工作的一些提示:
使用
print
语句或import pdb;pdb.set_trace()
用于调试,所以你知道你的代码在做什么首先编写简短的小元素并立即测试,不要从头开始编写所有代码并稍后查看。尝试尽早测试运行您的代码,看看它是否按预期运行。
通常,您只想调用一次 main 函数是一个很好的经验法则。
推荐阅读
- linq - Linq 加入 2 个表并为这两个表使用 contains
- c++ - Qt Creator 无法启动 cdb 调试器
- html - TYPO3 name of language file?
- java - 如何整体导出依赖项?
- mongodb - 在 Redash 中更新 Mongo 文档的查询
- amazon-web-services - 安装 Boto3 AWS EMR 尝试下载引导操作失败
- prolog - Prolog中解决农民山羊狼和白菜问题的优化
- php - PHP 不会通过 POST 传递变量
- android - 在 Delphi 上更改导航栏颜色
- javascript - 链接在 React 组件中获取“POST”