python-3.x - 刽子手程序:循环中不正确使用全局变量
问题描述
我正在编写一个程序来玩游戏刽子手,但我认为我没有正确使用我的全局变量。
一旦程序的第一次迭代在正确猜测后结束,任何具有正确猜测的后续迭代都会打印出word
它及其所有过去的值。
我怎样才能只打印 的最新值word
?这段代码在一个 while 循环中,每次迭代都会获取用户输入。谢谢!
代码:
word=''
#lettersGuessed is a list of string values of letters guessed
def getGuessedWord(secretWord, lettersGuessed):
global word
for letter in secretWord:
if letter not in lettersGuessed:
word=word+' _'
elif letter in lettersGuessed:
word=word+' '+letter
return print(word)
输出:
#first iteration if 'a' was guessed:
a _ _ _ _
#second iteration if 'l' was guessed:
a _ _ _ _ a _ _ l _
#third iteration if 'e' was guessed:
a _ _ _ _ a _ _ l _ a _ _ l e
#Assuming the above, for the third iteration I want:
a _ _ l e
注意:这只是我代码的一小部分,但我觉得其他块不相关。
解决方案
您面临的主要问题是每次调用函数时都会附加全局变量。但是,我认为您不需要使用全局变量,通常这是一种非常糟糕的做法,您可以简单地使用以下代码来考虑您在问题中解释的内容:
def getGuessedWord(secretWord, lettersGuessed):
return ' '.join(letter if letter in lettersGuessed else '_'
for letter in secretWord)
我还认为,如果您使用 python 理解来使您的代码更快,那会更好。
推荐阅读
- html - HTML 中的 Mathjax:无法选择方程式
- c# - 为什么我的预制件在场景中掉落时位置会发生变化?
- javascript - React 安装问题 npx-create-react-app 无法正常工作
- pointers - c语言中的指针指向什么类型的内存?
- python - 我可以在子类的构造函数中为 kwarg 添加特异性吗?
- node.js - 如何将查询参数从前面的材质对话框发送到node js后端
- python - 如何在ffmpeg中使用字节而不是文件路径?
- tensorflow - 使用 Keras ImageDataGenerator 时预处理操作的顺序是什么?
- ruby-on-rails - 当您使用 pgbouncer 时,是否有理由将 Active Record 池的大小保持在较低水平?
- c# - 比较两个列表并仅在第一个列表与第二个列表的条件匹配时更新