【发布时间】:2016-12-20 13:11:12
【问题描述】:
我试图打破这个循环。如果单词中的字符不在手边,我返回了 False 并添加了一个中断,这是一个字典,每个字母都有整数值,基于拼字游戏字母分数。这是一个大型游戏的一部分,但这个特殊功能会检查我输入的单词是否有效。
现在我遇到的问题是,如果输入的单词不在单词列表中,则输入被拒绝,并要求玩家输入另一个单词。但是...例如,如果我输入一个字母,手仍然会更新以删除该字母,因此当我使用所有三个字母重新输入单词时不可用。
例如:
如果我的手是你的手
而我输入 u,我的话将无效,但手现在只包含 r t。因此 rut 将不再可用。
在最近 24 小时的连续编码之后,我对循环和 return 语句有了很好的掌握,但我不知道如何构造这个循环来避免这个问题。
代码如下:
def is_valid_word(word, hand, word_list):
"""
Returns True if word is in the word_list and is entirely
composed of letters in the hand. Otherwise, returns False.
Does not mutate hand or word_list.
word: string
hand: dictionary (string -> int)
word_list: list of lowercase strings
"""
remaining = hand
for c in word:
if c not in remaining.keys(): """Loop 1"""
return False
break
if c in remaining.keys(): """Loop 2"""
remaining [c] -= 1
if remaining [c] < 0: """Loop 3"""
return False
if word in word_list:
return True
else:
return False
但是,我构建循环最终条件会失败。如果我缩进循环 2 和 3,那么如果字母不在手中,它们就会失败,反之亦然。显然,一个简单的修复方法类似于 break(n loops) ,但这在 Python 中不存在。有什么建议可以做到这一点吗?因为我是编程新手,所以我已经研究了很长时间。
提前致谢!
【问题讨论】:
-
我已经多次看过这个问题,但对我来说没有多大意义,而且情况似乎有点不同。我肯定会尽量让这段代码保持绝对简单,因为我正在学习 Python 初学者课程,并且由于我们还没有学到太多东西,因此需要一个简单的答案。此外,我希望获得更多个性化的答案,这就是我花时间和精力提出问题和放置代码的原因。
-
我不太清楚您的要求,但是您可以将变量设置为 true 并在变量为 true 时循环,然后在需要中断的地方将其设置为 false在循环之外。
-
我建议您使用调试器或
print()语句来弄清楚您的代码中发生了什么。