为了账号安全,请及时绑定邮箱和手机立即绑定

Python 中的 Pig 拉丁化字符串

Python 中的 Pig 拉丁化字符串

天涯尽头无女友 2021-11-16 14:25:14
我是一名非常喜欢编程的本科生。我在做练习的时候遇到了一个问题,我很困惑。我在网上搜索了相关文件(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我很困惑,谢谢大家的帮助。
查看完整描述

2 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

此类问题应首先正确解释,然后使用笔和纸,尝试设计一种算法来解决您的问题。然后,您可以对其进行编码,从而生成无错误且功能齐全的代码。这是您解决问题的代码。


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'


查看完整回答
反对 回复 2021-11-16
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

这就是你的函数应该是什么样子


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),您会忘记在单词之间添加额外的空格。


查看完整回答
反对 回复 2021-11-16
  • 2 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信