python-3.x - 函数在循环内返回?
问题描述
函数的 return 语句如何在 for 循环中工作?请参阅下面的代码,了解是什么让我想到了这一点。
这就像一个拼字游戏。你得到 n 个字母(我们称之为手),目的是从你的手中说出一个词。手是字典的形式,像这样:
yellow = {'y':1, 'e':1, 'l':2, 'o':1, 'w':1}
我编写了一个函数get_frequency_dict
,用于将字符串转换为这种形式。
我想写一个函数来告诉我给定的单词是否有效。我在变量中有一个可接受的单词列表word_list
调用函数:is_valid_word(word, hand, word_list)
它接受三个输入。
word: string
hand: dictionary (string: int)
word_list: list of lowercase strings
所以,我想编写这个函数,如果单词有效则返回 True,如果单词无效则返回 False:
def is_valid_word(word, hand, word_list):
word_dict = get_frequency_dict(word.lower())
if word.lower() in word_list:
for char in word_dict:
if (char in hand) and (hand[char] >= word_dict[char]):
return True
else:
return False
else:
return False
这个函数似乎适用于各种不同的输入,但我不太确定我是否理解 for 循环中函数返回背后的逻辑?
当我们遍历字典中的键(字母)时,我们将根据条件是否满足得到 True 或 False。那么,函数如何知道要返回什么?如果一个字符返回 False,然后下一个字符返回 True,该怎么办?一旦在 for 循环中看到一个 False,它会立即返回 False 吗?
下面的代码对我来说更有意义:
total_false = 0
for char in word_dict:
if (char in hand) and (hand[char] >= word_dict[char]):
pass
else:
total_false += 1
if word.lower() not in word_list:
return False
elif total_false > 0:
return False
else:
return True
第一段代码在幕后做这个“计数”吗?如,一旦我们看到一个 False,它就会返回 False?
解决方案
只需遍历列表,如果发现错误,请停止:
def is_valid_word(word, hand, word_list):
word_dict = get_frequency_dict(word.lower())
if word.lower() in word_list:
for char in word_dict:
if (char in hand) and (hand[char] >= word_dict[char]):
continue
else:
return False #This will stop the function and return false
else:
return False #This will do the same
#At the end, this means that all of the criteria are met, so we return True
return True
正如我们所看到的,当一个字符不符合条件时,函数停止并返回false
。如果它通过了所有条件,则返回true
.
推荐阅读
- sql - 如何在 PostgreSQL 中对递归查询进行排序
- corda - 在 Corda 中使用 Account Framework 时使用 SyncKeyMappingFlow 时出错
- google-apps-script - 使用 Google Apps 脚本创建 Google Analytics 4 属性
- r - R闪亮:填写提示用户并支持自动填充功能的表单时不需要的反应
- python - 分配给类变量时如何修复pylint的未使用私有成员?
- javascript - 在 JS 中将 00 转换为 12
- c++ - 在 for 循环中的 2D 网格迷宫中显示周期
- apache - 如何在 apache 内部配置 mod_qos 以防止 DoS 攻击?
- bash - inotifywait - 仅在每秒保存时重新启动 ghci
- powershell - 在 PowerShell 脚本中正确组合 RestMethod 的字符串