2017-02-17 8 views
0

私は豚のラテン語/犬のラテン語に変わるコードを書こうとしています。たとえば、isyayになり、scramはamscrayになります。最初の状況では動作しますが、2番目の状況ではクラムセーが印刷されます。なぜそれは正しくルーピングされていないようですか?Forループは、すべてのリストインデックス(入れ子にされたif文)を反復しているようには見えません。

def doggify(word): 
    wordlist=list(word) 
    start=word[0] 
    if start=='a' or start=='e' or start=='i' or start=='o' or start=='u': 
     dogword=word+'yay' 
     return print(dogword) 
    else: 
     empty=[] 
     for letter in wordlist: 
      if letter!='a' or letter!='e' or letter!='i' or letter!='o' or letter!='u': 
       empty.append(letter) 
       wordlist.remove(letter) 
      dogword=''.join(wordlist)+''.join(empty)+'ay' 
      return print(dogword) 
+1

まず 'if'は' or'の代わりに必要 'and' –

+2

いっそのこと、' 'AEIOU' で開始した場合: ' –

+1

また、あなたのforループが正しく字下げされていない –

答えて

1

あなたは何をすべきは、実際にはelse文の内部で最後の2行を追加し、残りのオリジナルの手紙のために別のリストを使用しています。あなたが反復しているリストから削除するので、手紙はスキップされています。このコードは、実際にそれをしない:

def doggify(word): 
    wordlist = list(word) 
    start = word[0] 
    if start in 'aeiou': 
     dogword = word + 'yay' 
     return dogword 
    else: 
     empty = [] 
     new = list(wordlist) 
     for letter in wordlist: 
      if letter not in 'aeiou': 
       empty.append(letter) 
       new.remove(letter) 
      else: 
       dogword = ''.join(new) + ''.join(empty) + 'ay' 
       return dogword 
+0

それを試してみてください。同じ問題。それはまだスクラムのような言葉のために "クラムシー"を印刷します。 – Hannah

+0

これは実際に動作します。私は重要なことを見落としていました、特にあなたが繰り返していたリストから削除していたもの – sbacaro

+0

ありがとうございました! 2番目のelse文が必要な理由を知っていますか?それとも、私が手紙をしてもうまくいかない理由!= 'a' ...など? – Hannah

0

次のコードを試してください: -

def doggify(word): 
wordlist=list(word) 
start=word[0] 
if start=='a' or start=='e' or start=='i' or start=='o' or start=='u': 
    dogword=word+'yay' 
    return dogword 
else: 
    empty=[] 
    for letter in wordlist: 
     if letter!='a' or letter!='e' or letter!='i' or letter!='o' or letter!='u': 
     empty.append(letter) 
     wordlist.remove(letter) 
     dogword=''.join(wordlist)+''.join(empty)+'ay' 
     return dogword 

input:- print doggify('test') 
output:- esttay 
+0

すでに試してみましたか、結果を変更していません。 – Hannah

0
def doggify(word): 
    if word[0] in 'aeiou': 
     return word+'yay' 
    else: 
     consonants = [] 
     tail = [] 
     out = consonants 
     for letter in word: 
      if letter in 'aeiou' and out is not tail: 
       out = tail 
      out.append(letter) 
     return ''.join(tail)+''.join(consonants)+'ay' 

print(doggify('scram')) 

プリントamscray

+0

はい、これは近いですが、望ましい出力はamscrayです。私は基本的に、母音に達するまで子音を空にしておきたい。その後、私は単語リストに残されているものを含めるだけです – Hannah

+0

修正されました。あなたは質問にそれを書いたかもしれません;) –

+0

母、あなたは正しいです。私は明らかに午前2時にスタック交換に投稿するべきではありません! – Hannah

関連する問題