簡體   English   中英

function 使用 while 循環返回列表中的字符,同時還受制於其他條件

[英]function that uses a while loop to return characters in a list while also being subject to other conditions

作為序言,因為我正在學習使用 while 循環,所以我想寫這個 function只有 if 語句、in 語句和 while 循環 我想我可能還需要使用break 或 continue 我不想使用 for 循環或 forms 列表理解。

function 本身應該看起來像take_last(lst)

它通常應該接受一個單詞列表並返回列表中的最后一個值,其中刪除了第一個和最后一個字符。

例如,

take_last[“Fish”, “Meat”, “Fruit”, “Cake”]

將返回“ak” ,因為這是列表中刪除了字符“C”和“e”的最后一個單詞。 function這部分比較簡單。 我認為可以用

return (lst[-1])[slice(1,-1)]

但是,它受制於兩個不同的條件,這可能會使寫入 function 變得困難。

  1. 如果列表中的名字少於 3 個字符,則 function 將停止並返回“finished”

take_list([“SH”, “Meat”])將在“SH”處停止並返回“finished”

  1. 否則,如果不滿足此條件且第一個單詞有 3 個或更多字符,則 function 將繼續遍歷列表,直到找到另一個少於 3 個字符的單詞。 然后它將在此時停止並返回列表中的前一個字符,其中刪除了第一個和最后一個字符。

也就是說,如果輸入是take_last([“Fish”, “Meat”, “Fruit”, “SH”, “Cake”]) function 在“SH”處中斷,而是返回“rui” (沒有'F的水果

我在嘗試什么

雖然我不確定如何構建 while 循環,但我已經編寫了第一個條件已滿足的 function。

def take_last(lst):
    if len(lst[0]) < 3:
        return "finished"
    else:
        return (lst[-1])[slice(1,-1)]

take_last([“Fish”, “Meat”, “Fruit”, “Cake”])將返回“ake”

take_last([“Fi”, “Meat”, “Fruit”, “Cake”])將返回

“finished”

我知道在我的 function 中的某處我需要一個 elif 語句,然后是一個 while 循環,但我不確定這會是什么樣子。 任何幫助,將不勝感激。

這是一個簡單的方法。

def take_last(lst):
    i = 0
    while i < len(lst) and len(lst[i]) >= 3:
        i += 1
    if i == 0:
        return "finished"
    else:
        return lst[i-1][1:-1]

只要索引i處的字符串至少有 3 個字符長, while循環就會重復。 所以當它完成時, i包含第一個短字符串的索引; 如果沒有短元素,它將包含列表的長度。

如果第一個字符串很短, i將為0 ,所以它前面沒有元素,我們返回finished

否則我們返回i之前的元素切片。 當沒有短元素時,這將是最后一個元素。

所以返回刪除第一個和第三個字符的最后一個單詞是我們能做的最后一件事。 它之前可能存在導致 function 提前停止的條件。

所以,現在我們知道什么會成為我們的默認回報

  return (lst[-1])[slice(1,-1)]

同樣,您要檢查的第一個條件也是正確的。 這樣就修復了我們的起始if

    if len(lst[0]) < 3:
        return "finished"

現在是條件 2。我們可以在else子句中解決這個問題。 我們需要遍歷列表以查找少於 3 個字符的單詞。 如果我們找到它,我們將在截斷后返回它之前的元素。

else:
    i = 1
    while (i < len(lst)):
        if len(lst[i]) < 3:
            return (lst[i-1])[slice(1,-1)]
        i += 1

一切都放在一起:

def take_last(lst):
    if len(lst[0]) < 3:
        return "finished"
    else:
        i = 1
        while (i < len(lst)):
            if len(lst[i]) < 3:
                return (lst[i-1])[slice(1,-1)]
            i += 1
    return (lst[-1])[slice(1,-1)]

您可以使用常規for循環輕松地完成此操作,對我來說,感覺比使用while循環更自然:

def take_last(lst):
    prev = None
    for val in lst:
        if len(val) < 3:
            break
        prev = val
    if prev is None:
        return "finished"
    else:
        return prev[1:-1]

暫無
暫無

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

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