3

我需要在python中找到字符串的第一个元音,我是初学者。我被指示将第一个元音之前的字符移动到单词的末尾并添加“-ay”。例如,“big”变成“ig-bay”,“string”变成“ing-stray”(基本上是piglatin)。

这是我到目前为止所拥有的:

def convert(s):

    ssplit = s.split()
    beginning = ""
    for char in ssplit:
        if char in ('a','e','i','o','u'):
            end = ssplit[char:]
            strend = str(end)
        else:
            beginning = beginning + char
    return strend + "-" + beginning + "ay"

我需要找到一种方法来阻止“if”语句在找到第一个元音后寻找更多的元音 - 至少我认为这是问题所在。谢谢!

4

5 回答 5

2

一步一步把事情分解。

你的首要任务是找到第一个元音。让我们这样做:

def first_vowel(s):
    for index, char in enumerate(s):
        if char in 'aeiou':
            return index
    raise Error('No vowel found')

然后你需要使用第一个元音来分割你的单词:

def convert(s):
    index = first_vowel(s)
    return s[index:] + "-" + s[:index] + 'ay'

然后测试它:

print(convert('pig'))
print(convert('string'))

完整的代码,可运行,在这里:https ://repl.it/Dijj

对于没有元音的单词,异常处理留作练习。

于 2016-09-27T17:16:53.277 回答
0

break一旦找到元音,您就可以使用语句。您也不需要使用任何split()功能。您犯的一个大错误是char使用SubString. 您需要使用该字符的索引来获取SubString

看看这个:

def convert(s):
    beginning = ""
    index = 0;
    for char in s:
       if char in ('a','e','i','o','u'):
           end = str(s[index:])
           break
       else:
           beginning = beginning + char
       index = index + 1
    return str(end) + "-" + beginning + "ay"
于 2016-09-27T16:57:09.907 回答
0

边注。您可以使用正则表达式:

>>> import re
>>> cases=['big','string']
>>> for case in cases:
...    print case+'=>', re.sub(r'^([^aeiou]*)(\w*)', '\\2-\\1ay', case)
... 
big=> ig-bay
string=> ing-stray
于 2016-09-27T17:29:34.153 回答
0

添加一个break您希望 for 循环结束的位置:https ://docs.python.org/2/tutorial/controlflow.html

于 2016-09-27T16:53:30.633 回答
0

Python 有用于循环控制的breakandcontinue语句。您可以设置一个触发的布尔值,以便:

if flag:
    break
#do code
#set flag
于 2016-09-27T16:54:00.540 回答