【问题标题】:if-else statement not working correctly in python for loopif-else 语句在 python for 循环中不能正常工作
【发布时间】:2022-11-24 06:17:13
【问题描述】:

我有一段代码,我正在通过字典迭代查找找到的关键字以及找到每个关键字的次数。如果找到关键字,则 if 语句起作用并返回预期的输出。但是,当没有找到关键字时,else 语句不起作用,它应该返回“找不到关键字”。这看起来很简单,但我无法理解为什么这不起作用。我对编码还很陌生,所以如果这看起来非常基础,我深表歉意。

这是我正在使用的代码块:

    with open(keyword_file_path, 'r') as file:
        data = file.read()

    kw_found = {}
    for keyword in keywords:
        found = re.findall(keyword, data, re.I)
        if found:
            kw_found[keyword] = len(found)

    for key in kw_found.keys():
        if key in kw_found.keys():
            width = max(len(x) for x in key)
            output_fp.write("{0:<{1}} : {2}\n".format(key, width, kw_found[key]))
        else:
            output_fp.write("No Keywords Found\n")

if 语句有效,如果它确实找到了预定义的关键字,我们会得到以下输出:

狗:5

猫:2

鸟:100

当它没有找到关键字时应该发生的是返回“No Keywords Found”;但是,它只是不返回任何内容。没有报告错误,所以如果我理解正确的话,它似乎永远不会将 else 语句视为 True 。

任何让这个工作的建议将不胜感激!提前谢谢你!

【问题讨论】:

  • keywords 的值是多少?
  • 你的keyword_file_path 文件是什么样子的?
  • 循环 for key in kw_found.keys(): 然后检查 if key in kw_found.keys() 总是会是真的..

标签: python dictionary if-statement


【解决方案1】:
    for key in kw_found.keys():

上面的行将遍历 kw_found.keys() 的每个元素,将它们绑定到键。

        if key in kw_found.keys():

这会询问我们从kw_found.keys() 中查看的内容是否在kw_found.keys() 中 - 是的,它是。

            width = max(len(x) for x in key)
            output_fp.write("{0:<{1}} : {2}
".format(key, width, kw_found[key]))

下一行永远不会触发。如果kw_found.keys() 为空,则它所在的块将永远不会触发。

        else:
            output_fp.write("No Keywords Found
")

【讨论】:

    【解决方案2】:

    观察到的行为是正确的。在您的代码中,您正在遍历所有检测到的关键字,这些关键字存储在 kw_found 中。然后您正在检查当前关键字是否是您正在迭代的字典的一部分。这总是正确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-13
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多