Python 中的 Pig 拉丁化字符串

我是一名非常喜欢编程的本科生。我在做练习的时候遇到了一个问题,我很困惑。我在网上搜索了相关文件(https://www.dreamincode.net/forums/topic/293449-simple-pig-latin-program-have-trouble/),但我还不能清楚地理解。


要求如下:


给定一个空格分隔的单词序列,返回一个新的空格分隔的单词序列,修改为猪拉丁语。这里的猪拉丁语定义为修改一个单词以去掉单词第一个元音之前的字母,并在其末尾添加“ay”。如果单词以元音开头(a、e、i、o 或 u,而不是 y),只需在其末尾添加“way”即可。例如:ball 变成 allbay 而 I 变成 Iway。提示: split() 和 join() 函数在这里可能很有用。


Example: 


Input: "this is a test" 


Output: "isthay isway away esttay" 


Example 2: 


Input: "how are you today" 


Output: "owhay areway ouyay odaytay"

我的代码如下:


def pig_latin(s):

    VOWELS = ("a", "e", "i", "o", "u", "A", "E", "I", "O", "U")

    words = s.split()

    s1 = ''

    s2 = ''

    for w in words:

        if w[0] in VOWELS:

            s1 += w + 'ay' 

        else:

            s2 += w[1:] + w[0] + 'ay'

    return s1.join(s2)

测试用例如下:


Traceback (most recent call last):

  File "/grade/run/test.py", line 40, in test_hard

    self.assertEqual(pig_latin(n), a)

AssertionError: 'hriscaylustercayhrowtay' != 'ischray usterclay owthray'

- hriscaylustercayhrowtay

? --     ^        ^^

+ ischray usterclay owthray

?    ++  ^      +  ^   ++


Traceback (most recent call last):

  File "/grade/run/test.py", line 33, in test_case

    self.assertEqual(pig_latin(n), a)

AssertionError: 'hisayaayofayiisayaayofaysisayaayofaytisay[472 chars]fayy' != 'isthay isway away ongerlay entencesay ofw[20 chars]yday'

- hisayaayofayiisayaayofaysisayaayofaytisayaayofayaisayaayofayyisayaayofayoisayaayofaynisayaayofaygisayaayofayeisayaayofayrisayaayofaylisayaayofayaisayaayofayyisayaayofayeisayaayofaynisayaayofaytisayaayofayeisayaayofaynisayaayofaycisayaayofayeisayaayofaysisayaayofayaisayaayofayyisayaayofayeisayaayofaydisayaayofayiisayaayofayuisayaayofaymisayaayofaymisayaayofayaisayaayofayyisayaayofayiisayaayofayfisayaayofayfisayaayofayiisayaayofaycisayaayofayuisayaayofaylisayaayofaytisayaayofayyisayaayofaydisayaayofayaisayaayofayy

+ isthay isway away ongerlay entencesay ofway ediummay ifficultyday



我很困惑,谢谢大家的帮助。


天涯尽头无女友
浏览 196回答 2
2回答

扬帆大鱼

此类问题应首先正确解释,然后使用笔和纸,尝试设计一种算法来解决您的问题。然后,您可以对其进行编码,从而生成无错误且功能齐全的代码。这是您解决问题的代码。def fun(s):  words = s.split()  new_string = ""  vowels = ("a", "e", "i", "o", "u", "A", "E", "I", "O", "U")  for word in words:    new_word = ""    flag = False    for i in range(len(word)):      if word[i] in vowels and i>0:        new_word = word[i:] + word[:i] + "ay"        flag = True        break      if word[i] in vowels and i == 0:        new_word = word + "way"        break    if new_word:      new_string += " " + new_word    else:      new_string += " " + word  return new_string测试用例:>>> fun("this is a test")' isthay isway away esttay'>>> fun("bcd")' bcd'>>> fun("how are you today")' owhay areway ouyay odaytay'

料青山看我应如是

这就是你的函数应该是什么样子def pig_latin(s):VOWELS = ("a", "e", "i", "o", "u", "A", "E", "I", "O", "U")words = s.split()result = []for w in words:    if w[0] in VOWELS:        result.append(w + 'way')    else:        for idx, char in enumerate(w):            if char in VOWELS:                result.append(w[idx:] + w[:idx] + 'ay')                break            else:                continue        else:            result.append(w)return ' '.join(result)由于您想取出第一个元音之前的所有辅音,您需要遍历每个单词以检查第一个元音的位置。此外,在执行 时s1.join(s2),您会忘记在单词之间添加额外的空格。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python