python文本转换为Pig Latin

jk9hmnmh  于 2022-12-02  发布在  Python
关注(0)|答案(3)|浏览(158)

我需要一个Python程序转换为Pig拉丁语输入句子有2条规则:
1.如果一个单词以一个辅音开头,则第一个元音之前的所有辅音都移到单词的末尾,然后在末尾添加字母“ay”。例如,“coin”变成“oincay”,“flute”变成“uteflay”。
1.如果一个单词以元音开头,那么“yay”就加在结尾。例如,“egg”变成“eggyay”,“oak”变成“oakyay”。
到目前为止,我已经编写了以下程序:

string = input('String: ')

if string[0].upper() in 'BCDFGJKLMNPQSTVXZHRWY':

    print(string.replace(string[0],'') + string[0]+'ay')

if string[0].upper() in 'AEIOUY':
    print(string + 'yay')
#vowels = [each for each in

但这只适用于一个单词(而我需要整个句子),第一部分只替换第一个辅音,而不是全部(而我需要替换第一个元音之前的所有辅音)

thigvfpy

thigvfpy1#

您的输入获取了用户输入,但是string[0]只引用了字符串中的第一个字符。您需要使用.split()方法将字符串拆分为单词并循环遍历这些单词。但是,现在您完成了这一操作,您希望将其打印到1行中。因此,请将print中的end参数更改为类似空格的内容。
请尝试以下操作:

sentance = input('String: ').split()
for word in sentance: # loop thru each word
    if word[0].upper() in 'BCDFGJKLMNPQSTVXZHRWY':
        print(word.replace(word[0],'') + word[0]+'ay', end = " ")
    elif word[0].upper() in 'AEIOUY':
        print(word + 'yay', end = " ")
print() # just to skip to a new line once its done

我修改了变量名以使其清晰。希望这对你有帮助!

blpfk2vs

blpfk2vs2#

我们可以尝试使用带有回调函数的正则表达式替换:

inp = "coin flute egg oak"
output = re.sub(r'\w+', lambda m: re.sub(r'([b-df-hj-np-tv-z]+)(\w+)', r'\2\1ay', m.group()) if not re.search(r'^[AEIOUaeiou]', m.group()) else m.group() + 'yay', inp)
print(output)  # oincay uteflay eggyay oakyay
vkc1a9a2

vkc1a9a23#

你需要找到第一个元音,然后根据它是否在第一个字符(0索引)之后,采用大小写1或2。

def porcus(sin):
    vowels = set("aeiouy")

    for vowel1, ch in enumerate(sin.lower()):
        #identify first vowel - `ch in "aeiouy"` would work too.
        if ch in vowels:
            break
    else:
        return f"{sin}ay"

    if not vowel1:
        #starts with vowel
        return f"{sin}yay"
    
    #take from vowel position to end, add start before and ay
    res = sin[vowel1:] + sin[:vowel1] + "ay"
    
    return res

inps = "coin flute egg oak The" 
exps = "oincay uteflay eggyay oakyay eThay"

dataexp = zip(
        inps.split(),exps.split()
)

for inp, exp in dataexp:
    got = porcus(inp)
    msg = f"{str(inp):100.100} \n  exp :{exp}:\n  got :{got}:\n"
    if exp == got:
        print(f"✅! {msg}")
    else:
        print(f"❌!  {msg}")

输出:

✅! coin                                                                                                 
  exp :oincay:
  got :oincay:

✅! flute                                                                                                
  exp :uteflay:
  got :uteflay:

✅! egg                                                                                                  
  exp :eggyay:
  got :eggyay:

✅! oak                                                                                                  
  exp :oakyay:
  got :oakyay:

✅! The                                                                                                  
  exp :eThay:
  got :eThay:

你也可以插入xkcd。我想你会想要xkcday
整个句子应该可以用。

相关问题