2017-02-17 51 views
0

我想寫一個代碼,這將變成一個字拉丁文/狗拉丁文。例如,is is is isyay,scram會變成amscray。第一種情況是有效的,但是第二種情況是打印出來的。爲什麼它似乎沒有正確循環?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'需要或''的',而不是和' –

+2

更妙的是,如果'開始在 'AEIOU':' –

+1

此外,您的for循環沒有正確縮進 –

回答

1

你應該做的其實是最後兩行添加一個else語句內,並用另一個列表中剩餘的原始信件。由於您正在從列表中刪除,因此正在跳過字母。這段代碼實際上做的:

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

試過了。同樣的問題。它仍然打印「cramsay」像scram這樣的詞。 – Hannah

+0

這實際上起作用。我忽略了重要的事情,特別是你從你正在迭代的列表中刪除 – sbacaro

+0

非常感謝!你碰巧知道爲什麼第二個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。我基本上希望將輔音添加到空白直到達到元音。然後我只想要wordlist包含剩下的內容 – Hannah

+0

更正。你可以在問題中寫下它,但是;) –

+0

哈哈,你是對的。我顯然不應該在凌晨2點在堆棧交換上發帖! – Hannah