我试图在一个单词中找到第一个元音的位置,但它一直在输出' -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
答案 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。
相反,我会避免使用开始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
答案 2 :(得分:-1)
最简单的答案是添加continue
:
if aLow < 0:
continue
if aLow < low:
low = aLow
原因:
如果在未更改continue
变量的情况下找不到匹配项,则搜索需要low
。