0

由于某种原因,此代码不起作用:

def pyglatin(word):
    output = ""
    wordlenedit = len(word)-1
    wordlen = len(word)
    fixer = 0
    while fixer == 0:
        for i in word:
            if i == 'a' or i == 'e' or i == 'o' or i == 'i' or i == 'u':
                fixer = 1
            else:
                wordlenedit -= 1
    else:
        output = word[wordlenedit:wordlen:1] + '-' + word[0:wordlenedit:1] + 'ay'
        return output

要查看问题,请单击此处。问题似乎是它跳过了标识元音的if语句,但我不知道为什么。这会导致一些非常奇怪的输出。

4

2 回答 2

2

您的函数不起作用,因为您遍历单词,从 . 开始为遇到的每个辅音递减拆分索引wordlenedit = len(word)-1

for循环结束时,wordlenedit等于(length of the word) - 1 - (number of consonants)。仅当单词中元音的第一个索引(从 0 开始)等于元音的数量 - 1 时,该功能才会起作用。

此外,while循环在这里没有用,因为您遍历for循环中的整个单词。更糟糕的是:while如果你有一个没有元音的单词(比如“fly”,因为你不检查“y”),那么循环将是一个无限循环

这是您的函数的更正版本,使用关键字break

def pyglatin2(word):
    output = ""
    wordlenedit = 0
    wordlen = len(word)
    for l in word:
        if l == 'a' or l == 'e' or l == 'o' or l == 'i' or l == 'u':
            break
        else:
            wordlenedit += 1

    output = word[wordlenedit:wordlen:1] + '-' + word[0:wordlenedit:1] + 'ay'
    return output

但是,可以使用正则表达式以更简洁/简单的方式编写此函数,如下所示:

import re
def pyglatin3(word):
    # Get the first index of one of these: a, e, i, o, u
    start = re.search("[aeiou]", word).start()

    # Split the word
    return word[start:] + "-" + word[0:start] + "ay"
于 2013-08-26T01:53:53.200 回答
0

如果您想在不使用正则表达式的情况下执行此操作,最简单的方法是使用 enumerate

def pyglatin(word):
    for i, ch in enumerate(word):
        if ch in 'aeiou':
            return word[i:] + '-' + word[:i] + 'ay'
于 2013-08-26T03:09:45.577 回答