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

需要帮助在 python 中编写 Pig Latin 翻译代码

需要帮助在 python 中编写 Pig Latin 翻译代码

慕姐4208626 2023-07-11 10:39:25
我有一项任务,必须将英语单词翻译成猪拉丁语,这意味着如果一个单词以元音开头,则该单词末尾添加“ay”(“apple”将变成“appleay”),这不是一个问题是因为代码相对容易编写。然而,第二部分是,如果单词以辅音开头,则第一个元音之前的所有辅音都会被删除并添加到单词的末尾,之后字符串“ay”也会再次添加到末尾(“cheese”) ”将变成“eesechay”)。这是一个相当简单的概念,但我正在努力寻找一种方法来翻译该单词(如果该单词以辅音开头),这是到目前为止我的代码:def pigLatin(word):    for l in vowels:        if word[0] == l:            word = word + "ay"    for L in consonants:        if word[0] == L:            for i in vowels:                for s in word:                    if s == i:                        #this is where im completely lost仅供参考,元音和辅音是仅包含元音和辅音的数组,单词由用户输入。编辑:谢谢您的帮助,我已经成功地重新编写了代码并得到了一些有用的东西:def pigLatin(word):    if word[0]in vowels:        word = word + "ay"    elif word[0] in consonants:        c = ""        for l in word:            if l in vowels:                break            elif l in consonants:                c = c + l        word = word[len(c)-len(word):len(word)]        word = word + c + "ay"再次感谢您的帮助:)
查看完整描述

2 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

以下是一些可能有帮助的事情:


ascii_lowercase模块中string是包含所有小写字母字符的预定义字符串:


>>> from string import ascii_lowercase

>>> ascii_lowercase

'abcdefghijklmnopqrstuvwxyz'

>>> 

我们可以通过创建一组元音并获取元音和所有字符之间的差异来生成所有辅音的集合:


from string import ascii_lowercase as alphabet


vowels = set("aeiou")

consonants = set(alphabet) ^ vowels


print(consonants)

输出:


{'c', 's', 'q', 'm', 'g', 'd', 'y', 'l', 'b', 'k', 't', 'j', 'r', 'p', 'h', 'v', 'n', 'w', 'z', 'f', 'x'}

>>> 

由于这是一个集合,因此没有内在顺序,但这并不重要。如果我们想知道给定的字符是辅音还是元音,我们只需检查相应集合的成员资格(您可以对列表执行相同的操作,但集合将是首选数据结构)。


无论您的vowelsand是否使用列表或集合consonants,您都可以通过简单地检查成员资格(检查某个字符是否在集合中)来简化代码:


if word[0] in vowels:

    # The first letter is a vowel

elif word[0] in consonants:

    # The first letter is a consonant

如果您事先知道word只包含小写字母字符(没有特殊符号、数字、大写字母等),那么您可以进一步简化它:


if word[0] in vowels:

    # The first letter is a vowel

else:

    # If it's not a vowel, it must be a consonant

然而,如果你仔细想想,你根本不需要检查第一个字母是否是元音。您已经知道您将在最终字符串的末尾添加"ay",无论第一个字母是元音还是辅音 - 因此,您实际上只需要检查第一个字母是否是辅音。


使用到目前为止的所有内容,我将得到以下伪代码:


def to_pig_latin(word):


    from string import ascii_lowercase as alphabet


    vowels = set("aeiou")

    consonants = set(alphabet) ^ vowels


    if word[0] in consonants:

        # Do something


    return ... + "ay"

我已重命名该 function to_pig_latin,因为首选蛇形命名法,并且在函数名称前加上前缀to表示您正在翻译/转换某些内容。vowels我还将和的创建移到consonants了函数中,只是因为没有理由将它放在函数之外,而且这样更可爱。


查看完整回答
反对 回复 2023-07-11
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

我同意 Charles Duffy 的评论,即我们不为您设计程序。然而,你走错了路,我认为你需要一些指导。这是我正在谈论的一个例子。有很多方法可以做到这一点,这是一个简单的解决方案(众多解决方案之一)。


def pigLatin(word):

    vowels = list("aeiou")

    consonants = list("bcdfghjklmnpqrstvwxyz")


    if word[0] in vowels:

        word = word + "ay"

    else:

        for counter, letter in enumerate(list(word)):

            if letter in vowels:

                word = word[counter:] + word[:counter] + "ay"

                break


    return word



print(pigLatin("art"))

print(pigLatin("donkey"))

如果传递给 pigLatin 的单词包含大写字符怎么办?您可以通过将所有内容转换为小写(或大写,您的偏好)来修改该函数。


def pigLatin(word):

    vowels = list("aeiou")

    consonants = list("bcdfghjklmnpqrstvwxyz")


    if word[0].lower() in vowels:

        word = word + "ay"

    else:

        for counter, letter in enumerate(list(word)):

            if letter.lower() in vowels:

                word = word[counter:] + word[:counter] + "ay"

                break


    return word

您知道这段代码有多简单和灵活吗?


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

添加回答

举报

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