簡體   English   中英

給定列表時str.find()輸出'-1'

[英]str.find() outputs '-1' when given a list

我試圖在一個單詞中找到第一個元音的位置,但它一直輸出“ -1”。 當我將aLow = word.find(vowel)更改為aLow = word.find("a") ,它可以正常工作。

vowels = ['a','e','i','o','u']

while True:
    letters = []
    pGWord = ""

    word = raw_input("Type word to 'Pig Latin' it: ")
    low = len(word)

    for vowel in vowels:
        aLow = word.find(vowel)
        if aLow < low:
            low = aLow

    print low

正如br1ckb0t的答案所解釋的那樣,問題在於-1 小於所有索引。 因此,通過正確地返回指數最低發現,你返回-1,除非所有的人都發現,而不是只有當他們沒有被發現。

您可以輕松解決此問題。 只需更改此行:

if aLow < low:

… 至:

if aLow != -1 and aLow < low:

還有其他方法可以解決此問題。


例如,您可以將find包裝在將-1推到末尾的函數中:

def darn_minus_one(n):
    return sys.max_int if n==-1 else n

# ...

aLow = darn_minus_one(word.find(vowel))

這似乎有點愚蠢,直到您意識到它可以將整個功能替換為:

def darn_minus_one(n):
    return len(word) if n==-1 else n
return min((word.find(c) for c in chars), key=darn_minus_one)

或者,您根本無法使用find ,而是在元音組中查找每個字母:

vowels = set(vowels)
for i, c in enumerate(word):
    if c in vowels:
        return i
return -1

好的,問題出在:

if aLow < low:
    low = aLow

因此,這意味着當aLow-1low被設置為-1 ,然后由於沒有索引小於-1而停留在該位置。

因此,無論aLow是什么,輸出將始終是最低的索引-1 ,除非找到所有元音,否則它將為0。

取而代之的是,我避免使用從lowlen(word) ,然后找到小於它的索引的結構。 相反,也許嘗試這樣的事情:

vowels = ['a','e','i','o','u']

while True:
    letters = []
    pGWord = ""

    word = raw_input("Type word to 'Pig Latin' it: ")
    low = -1

    for vowel in vowels:
        aLow = word.find(vowel)
        if aLow != -1 and aLow < low:
            low = aLow

    if low == -1:
        low = len(word)

    print low

這使:

Type word to 'Pig Latin' it: Stack
>>> 2

最簡單的答案是添加一個continue

if aLow < 0:
      continue

if aLow < low:
      low = aLow

原因:

如果未找到匹配項而沒有更改low變量,則需要continue搜索。

暫無
暫無

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

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