[英]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
為-1
, low
被設置為-1
,然后由於沒有索引小於-1
而停留在該位置。
因此,無論aLow
是什么,輸出將始終是最低的索引-1
,除非找到所有元音,否則它將為0。
取而代之的是,我避免使用從low
和len(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.