-1

所以我有这个任务将多个单词翻译成猪拉丁语。假设用户总是输入小写字母和空格。

#----------------global variables
sentence = input("What do you want to translate into piglattin? ")
sentence = list(sentence)
sentence.insert(0, ' ')
length = len(sentence)
sentence.append(' ')
pigLattin = sentence
false = 0
true = 1
consonant = []

a = 0
b = 0
c = 0
d = 0
e = 0
f = 0
j = 0
x = 0
y = 0


#----------------main functions
def testSpace(sentence, i):
    if sentence[i] == ' ':
        a = true
    else:
        a = false
    return a

def testVowel(sentence, i):
    if sentence[i] == 'a' or sentence[i] == 'e' or sentence[i] == 'i' or sentence[i] == 'o' or sentence[i] == 'u' or sentence[i] == 'y':
        b = true
    else:
        b = false
    return b

def testStartWord(sentence, i):
    x = 0
    if sentence[i].isalpha() and sentence[i-1] == ' ':
        c = true
        x = 1
    if x == 1 and sentence[i] != 'a' and sentence[i] != 'e' and sentence[i] != 'i' and sentence[i] != 'o' and sentence[i] != 'u' and sentence[i] != 'y':
        c = true
    else:
        c = false
    return c
def testWordEnd(sentence, i):
    if sentence[i].isalpha() and sentence[i+1] == ' ':
        d = true
    else:
        d = false
    return d


#----------------main loop
for i in range(1,length):
    x = 0
    space = testSpace(sentence, i)
    vowel = testVowel(sentence, i)
    word = testStartWord(sentence, i)
    end = testWordEnd(sentence, i)

    if vowel == false and space == false and word == true:
        e = i
        consonant.append(sentence[i])
        pigLattin.pop(e)
        f = f + 1

    if end == true:
        consonant.append('a')
        consonant.append('y')
        consLength = len(consonant)

        for x in range(consLength):
            y = i + j - f
            pigLattin.insert(y,consonant[x])
            j = j + 1

        del consonant[:]

pigLength = len(pigLattin)   
for b in range (pigLength):
    print(pigLattin[b], end='')   

这就是我到目前为止所拥有的。尝试删除项目时会变得有点混乱。我有点卡在这里,它不工作。

好的,我现在可以工作了,这是一个更新的版本

sentence = input("Please enter a sentence: ")
vowels = ("a", "e", "i", "o", "u", "A", "E", "I", "O", "U")
words =  sentence.split()

count = 0

def find_vowel(word):
    for i in range(len(word)):
       if word[i] in vowels:
         return i
    return -1

for word in words:
  vowel = find_vowel(word)

  if(vowel == -1):
    print(word, ' ', end='')

  elif(vowel == 0):
    print(word + "ay", ' ', end='')

  else:
    print(word[vowel:] + word[:vowel] + "ay", ' ', end='')
4

2 回答 2

1

而不是通过使用testSpace消除空格sentence = sentence.split()。这会将您的所有单词拆分为列表中的字符串。然后遍历列表中的单词。

代替 using testStartWord,使用 if 语句:

for word in sentence:
  if word[0] in ["a","e","i","o","u"]:
    word[:(len(word)-1)] = word[0]
  #More Code...

最后,在打印输出的地方,使用print sentence.join()

于 2013-11-08T01:30:53.193 回答
0

这是一个替代版本。我使用正则表达式在输入字符串中查找单词,将它们传递给回调函数,然后将它们替换回原始字符串。这使我可以保留数字、间距和标点符号:

import re
import sys

# Python 2/3 compatibility shim
inp = input if sys.hexversion >= 0x3000000 else raw_input

VOWELS = set('aeiouyAEIOUY')
YS = set('yY')

def pig_word(word):
    """
    Given a word, convert it to Pig Latin
    """
    if hasattr(word, 'group'):
        # pull the text out of a regex match object
        word = word.group()

    # find the first vowel and what it is
    vowel, where = None, None
    for i,ch in enumerate(word):
        if ch in VOWELS:
            vowel, where = ch, i
            break

    if vowel is None:
        # No vowels found
        return word
    elif where == 0 and vowel not in YS:
        # Starts with a vowel - end in 'way'
        #   (leading y is treated as a consonant)
        return word + 'way'
    else:
        # Starts with consonants - move to end and follow with 'ay'

        # check capitalization
        uppercase = word.isupper() and len(word) > 1
        titlecase = word[:1].isupper() and not uppercase

        # rearrange word
        word = word[where:] + word[:where] + 'ay'

        # repair capitalization
        if uppercase:
            word = word.upper()
        elif titlecase:
            # don't use str.title() because it screws up words with apostrophes
            word = word[:1].upper() + word[1:].lower()

        return word

def pig_latin(s, reg=re.compile('[a-z\']+', re.IGNORECASE)):
    """
    Translate a sentence into Pig Latin
    """
    # find each word in the sentence, pass it to pig_word, and insert the result back into the string
    return reg.sub(pig_word, s)

def main():
    while True:
        s = inp('Enter a sentence to translate (or Enter to quit): ')
        if s.strip():
            print(pig_latin(s))
            print('')
        else:
            break

if __name__=="__main__":
    main()

然后

Enter a sentence to translate (or Enter to quit):
>>> Hey, this is really COOL!  Let's try it 3 or 4 times...
Eyhay, isthay isway eallyray OOLCAY!  Et'slay ytray itway 3 orway 4 imestay...
于 2013-12-01T01:35:42.653 回答