把句子译成拉丁语

2024-04-25 20:19:29 发布

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

所以我有一个函数,它接受一个句子,然后用piglatin返回。代码如下:

import re
from string import ascii_uppercase

def isvowel(ch):
    vowels = ("a", "e", "i", "o", "u", "A", "E", "I", "O", "U")
    for i in range(len(ch)):
        if ch[i] in vowels:
            return i
    return -1


def format(ch):
    if any(x in ascii_uppercase for x in ch): 
        ch = ch.capitalize()
    m = re.search(r'\W+', ch) 
    if m: 
        ch = ch.replace(m.group(0), '') + m.group(0)
    return ch 


def igpay(astring):
    vowels = ("a", "e", "i", "o", "u", "A", "E", "I", "O", "U")
    words =  astring.split()
    count = 0
    for ch in words:
        vowel = isvowel(ch)
        if vowel == 0:
            astring = astring.replace(ch,(format(ch + "way")))
        else:
            astring = astring.replace(ch,(format(ch[vowel:] + ch[:vowel] + "ay")))
    astring = astring.strip()        
    return astring

当我输入一个单词时,输出效果很好,但当我输入一个句子时,它就失控了。你知道吗

示例: 我得到的是:

>>>igpay("An apple a day keeps the doctor away")
>>>'Anwawaywayy awaywaypplewawaywayy awayway dawaywayy eepskay ethay octorday       awaywaywawaywayy'

我应该得到:

>>>igpay("An apple a day keeps the doctor away")
>>>'Anway appleway away ayday eepskay ethay octorday awayway'

如果我分别输入每个单词,就会得到正确的返回值。怎么回事?你知道吗


Tags: inimportformatforreturnifdefch
1条回答
网友
1楼 · 发布于 2024-04-25 20:19:29

这是因为通过替换词尾来修改循环中的整个句子。你知道吗

相反,您应该为列表中的每个单词执行此操作,将单词收集到列表中,并将它们按空格连接:

def igpay(astring):
    words = astring.split()
    modified_words = []
    for ch in words:
        vowel = isvowel(ch)
        if vowel == 0:
            ch = ch.replace(ch, (format(ch + "way")))
        else:
            ch = ch.replace(ch, (format(ch[vowel:] + ch[:vowel] + "ay")))
        modified_words.append(ch.strip())
    return ' '.join(modified_words)

用法示例(正是您要查找的内容):

>>> igpay("An apple a day keeps the doctor away")
'Anway appleway away ayday eepskay ethay octorday awayway'

相关问题 更多 >