2017-03-07 3 views
0

規則は、ラテン語の文章は以下のとおりです。豚ラテンファンクション文

1.for単語が子音で始まる、第1の母音の前に、すべての文字が単語の末尾に移動され、さらに「で追加されAY '
2.母音で始まる単語、' hay 'で単語が追加されます
3.母音を含まない単語の場合、最初の文字は単語の最後に移動され、' way '
4.すべての非文字(数字、記号)は無視されます

コードの主要部分exユーザーからの文字列入力を受け取り、pigLatin関数を呼び出し、返された結果を出力する無限ループを実行します。 pigLatin関数は単語のリストを入力として受け取り、上記の規則を使用してそれらをブタのラテン語に変換します。ユーザが「このプログラムを終了する」を入力文として入力すると、主要部分が終了する。すべてのケース(無効な入力を含む)についてプログラムを検証し、プログラムを保存します。

ルール3を解決することは非常に困難です。私がコードをテストするとき、出力は正しくありません... 私は一晩中それを苦労して眠れませんでした....助けてください あなたが何を考えウィレム・ヴァン・Onsemが言ったように

enter code here

sentence=input('input:') 
VOWELS=['a','e','i','o','u'] 
CONSONANTS=['b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z'] 
def pigLatin(): 
    t=-1 
    for word in newsentence: 

     if word[0] in CONSONANTS: 
      if 'a'and'e'and'i'and'o'and'u' not in word[1:]: 
       print(word[1:]+word[0]+'way',end=' ') 
      for u in word: 
       t +=1 
       if u in VOWELS: 
        print (word[t:]+word[0:t]+'ay',end=' ') 
       break 
    elif word[0] in VOWELS: 
     print (word[0:]+'hay',end=' ') 
    else: 
     print (word[0:]) 

while sentence!=('Quit the program'): 
newsentence=sentence.split() 
pigLatin() 
sentence=input('input:') 
+3

これはおそらくすでに1000回答えられています。 fooの 'a 'と' b'ではなく、 '' fooの '' a 'とfoo''の 'b' ... –

+0

"すべての非文字は無視されます "という意味は、アカウント? –

+2

[python pig latin converter]の可能な複製(http://stackoverflow.com/questions/15400008/python-pig-latin-converter) –

答えて

0

、この行は行いません:ここに私のコードです

if 'a'and'e'and'i'and'o'and'u' not in word[1:]: 

インタプリタを試してみるべきです。

'a' and 'e' not in "bar" 
# returns True 

これは、前後に来るものを見る論理演算子であるために起こります。これをやっている:

'a' and ('e' not in "bar") 

空でない文字列がブール値がTrue割り当てられますので、

Trueに評価
'a' and True 

に評価されています。

これはうまくいくものです。それはすべての要素が真であればTrueを返すだけで、Pythonの機能では秩序のあるループを行うことができます。

vowels = "aeiou" 

all(char not in vowels for char in word)