猪拉丁Python程序

时间:2017-05-25 00:31:22

标签: python python-3.x

我一直在研究Pig Latin计划。但是,它似乎没有工作,我无法弄清楚为什么。

user_input = input("Enter word to be translated:")

def translate(user_input): 
    first = user_input[0]
    if first == "a" or "e" or "i" or "o" or "u": 
         user_input = user_input.lower()
         user_input += "way" 
         return user_input
    else: 
        user_input = user_input.lower()
        user_input = user_input[1:]+first+"ay" 
        return user_input 

print(translate(user_input))

最重要的是,我希望利用枚举来找到第一个元音的位置,切片以隔离单词的第一个字母和连接以形成单词。我已经阅读了如何在几个网站上使用它,但我似乎无法弄清楚如何正确地将它应用到这个程序。我想在def def(user_input)之前我必须定义Vowels ='aeiou'吗?

6 个答案:

答案 0 :(得分:3)

你不能在Python中链接if这样的语句,你必须做很多事情:

if first == "a" or first == "e" or first == "i" or first == "u":

或缩短为:

if first in ["a", "e", "i", "u"]:

答案 1 :(得分:1)

以下是解决方案。我在您的代码中做了一些更改,我将在下面解释。

user_input = input("Enter word to be translated:\n")
#change_1
vowels = ['a','e','i','o','u']
def translate(user_input): 
    first = user_input[0]
#change_2
    if first in vowels: 
         user_input = user_input.lower()
         user_input += "way" 
         return user_input
    else: 
        user_input = user_input.lower()
#change_3
        for letter in user_input:
            if letter in vowels:
                index_value = user_input.index(letter)
                break
#change_4
        user_input = user_input[index_value:] +user_input[:index_value]+ "ay" 
        return user_input 

print(translate(user_input))

1)创建一个元音列表。

2)正如我们的朋友@zwer所提到的,你不能将if语句链接起来  蟒蛇。所以

  

首先是元音:

3)对于user_input中的每个字母,检查该字母是否为元音,如果该字母是元音,则找到它的索引

例如,请输入垃圾'

这里a是第一个元音,它的索引是2

if letter in vowels: 
    index_value = user_input.index(letter)

4)根据维基百科

  

"初始元音之前的所有字母都放在单词序列的末尾"

单词' trash'它会是

  

user_string = user_input [2:] + user_input [:2] +" ay"

将把该索引中的单词切换为end,并在该索引之前与字母合并。最后是" ay"。

  

'灰' +' tr' +' ay'

希望这有帮助。

答案 2 :(得分:0)

您可以在外部范围内定义元音。

vowels = 'a', 'e', 'i', 'o', 'u'

然后你可以使用的任何地方:

if first in vowels:

答案 3 :(得分:0)

除了可以更改第三行之外,您可以执行完全相同的操作:

if first == "a" or "e" or "i" or "o" or "u":

收件人:

if first == "a" or first == "e" or first == "i" or first == "o" or first == "u":

或:

if first in 'aeiou'

但是,如果您希望使用大写字母,建议将first更改为first.lower()

它变成:

user_input = input("Enter word to be translated:")

def translate(user_input): 
    first = user_input[0]
    if first.lower in 'aeiou': 
         user_input = user_input.lower()
         user_input += "way" 
         return user_input
    else: 
        user_input = user_input.lower()
        user_input = user_input[1:]+first+"ay" 
        return user_input 

print(translate(user_input))

如果您希望代码短一些,我设法将其缩短为:

def translate():
    user_input = input('Enter a word or sentence')
    for i in range(len(user_input.split())):print(str((user_input.split())[i][1::])+((user_input.split())[i])[0]+'ay', end=' ')
translate()

答案 4 :(得分:0)

“我的解决方案”涵盖以下规则: 1.单词是字母(a-z,A-Z)或撇号的连续序列。您可以假设函数的输入将仅仅是一个“单词”。例如:斑马,苹果 2.如果单词以元音开头,则Pig Latin版本是原始单词,并在其末尾添加“ way” 3.如果单词以辅音或一系列连续的辅音开头,Pig Latin版本会将所有辅音转移到单词的第一个元音,然后在单词的末尾添加“ ay”。 4.如果字母“ y”是单词的第一个字母,则应将其视为辅音,否则应将其视为元音。 5.如果原始单词大写,则该单词的新的Pig Latin版本应在首字母大写。如果原始的大写字母是辅音,并因此而被移动,则不应在新位置将其大写一次。

解决方案从这里开始:

    eng_to_pig_latin = {"football": "ootballfay", "Pittsburgh":"Ittsburghpay",
                "Apple":"Appleway","oink":"oinkway", 
    "ontology":"ontologyway","yellow":"ellowyay","yttrium":"iumyttray"}
     eng_word = 'yttrium'
     vowels = 'aeiou'
     def pig_latin(eng_word):
        sub,str1 = [],''
        first = eng_word[0]
        second =  eng_word[1]
        # Rule 2
        if first.lower() in vowels:
            piglatin = eng_word +'way'
        # Rule 3
        elif first.lower() == first and second.lower() in vowels:
            piglatin = eng_word[1:]+first+'ay'
        elif first.lower()+second.lower() not in vowels:
            # Rule 3 & 4
            for l in eng_word:
                if l not in vowels:
                    sub.append(l)
                else:
                    str1 = eng_word[eng_word.index(l):]
                    break
            str2 = ''.join(sub)
            piglatin = str1+str2+'ay'
        else:
            # Rule 5
            piglatin = eng_word[1:].capitalize()+first.lower()+'ay'
        print(f'Test word is {eng_word} and its equivalent piglatin word is 
              {piglatin}. Comparison with mapping dictionary is 
               {eng_to_pig_latin[eng_word] == piglatin}')

    pig_latin(eng_word)

注意:字典仅用于交叉检查结果是否符合预期,这是我在上一个打印语句中所做的。

答案 5 :(得分:0)

我将给定单词翻译成Pig Latin翻译的逻辑

元音= ['a','e','i','o','u']

def igpay(名称):

a_list =列表(名称)

如果元音中的a_list [0]:

print(“第一个字母是元音”)

apnd_letters =“ way”

其他:

print(“第一个字母是辅音”)

a_list.append(a_list [0])

a_list.pop(0)

apnd_letters =“ ay”

print(“猪的转载为{0}”。format(“”。join(a_list)+ str(apnd_letters)))

输出:

igpay(“猪”) 第一个字母是辅音 猪的转运是igpay

igpay(“苹果”) 第一个字母是元音 猪的转运是苹果的方式