str.find()输出' -1'当给出一个清单

时间:2015-05-06 22:33:59

标签: python python-2.7

我试图在一个单词中找到第一个元音的位置,但它一直在输出' -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

3 个答案:

答案 0 :(得分:3)

正如br1ckb0t's answer所解释的那样,问题是-1比所有索引。因此,通过正确返回找到的最低索引,除非找到所有,否则返回-1,而不是仅在找到 none 时才返回。

您可以轻松解决此问题。只需更改此行:

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

答案 1 :(得分:1)

好的,问题源于:

if aLow < low:
    low = aLow

因此,这意味着当aLow-1时,low设置为-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

答案 2 :(得分:-1)

最简单的答案是添加continue

if aLow < 0:
      continue

if aLow < low:
      low = aLow

原因:

如果在未更改continue变量的情况下找不到匹配项,则搜索需要low