簡體   English   中英

if-else 語句在 python for 循環中無法正常工作

[英]if-else statement not working correctly in python for loop

我有一段代碼,我正在通過字典迭代查找找到的關鍵字以及找到每個關鍵字的次數。 如果找到關鍵字,則 if 語句有效並返回預期的 output。 但是,當沒有找到關鍵字時,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 語句有效,如果它確實找到了預定義的關鍵字,我們將得到以下 output:

狗:5

貓:2

鳥:100

當它沒有找到關鍵字時應該發生的是返回“No Keywords Found”; 但是,它只是不返回任何內容。 沒有報告錯誤,所以如果我理解正確的話,它似乎永遠不會將 else 語句視為 True 。

任何讓這個工作的建議將不勝感激! 提前謝謝你!

    for key in kw_found.keys():

上面的行將 go 通過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}\n".format(key, width, kw_found[key]))

下一行永遠不會觸發。 如果kw_found.keys()是空的,它所在的塊將永遠不會觸發。

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

基本上,您將單獨檢查每個元素的列表遍歷與處理整個列表的列表理解混合在一起。 您幾乎總是想使用其中之一。 此外,如果您想查看列表中的某處是否為真,您不希望在循環中使用if/else塊 - 這將正確評估真分支,但它會評估每個不正確的元素的假分支'匹配條件(即使它在其他地方匹配。)它混淆了“無處”和“不在這里”。

觀察到的行為是正確的。 在您的代碼中,您正在遍歷所有檢測到的關鍵字,這些關鍵字存儲在 kw_found 中。 然后您正在檢查當前關鍵字是否是您正在迭代的字典的一部分。 這總是正確的。

我對此很陌生,但我認為您的 for 循環應該遍歷keywords ,而不是kw_found 如果只看已經找到的key,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 keywords.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")

好像 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)
    else:
        output_fp.write("No Keywords Found\n")

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]))

玩了一會兒之后,我終於得到了當 kw_found 字典為空時觸發的 else 語句。 現在,當在文件中找不到關鍵字時,我得到 else 語句的預期 output。 我感謝大家的反饋和建議。

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)

if kw_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 Keyword Found \n")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM