str.find公司()在给定lis时输出“1”

2024-06-03 07:49:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: trueinputrawtypefind单词wordlow
3条回答

好吧,问题的根源是:

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

正如br1ckb0t's answer所解释的,问题是-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

最简单的答案是添加continue

if aLow < 0:
      continue

if aLow < low:
      low = aLow

原因:

如果在不改变low变量的情况下找不到匹配项,则搜索需要continue。你知道吗

相关问题 更多 >