2013-11-04 46 views
-4
for word in sentence.split(): 

    if word[0] in VOWELS: 
     pig_latin = word + "ay" 

    else: 
     pig_latin = word[1:] + word[0] + "ay" 

    return pig_latin 

如何使它返回打印整個句子,而不僅僅是一個單詞?函數中的Python簡單循環

+0

請顯示整個功能。 – Daniel

+0

爲了好玩:如果你只是把'return'改成'yield',你可以在'pig_latinize(句子):print(ordway)'中編寫'ordway',它會得到所有的單詞。請參閱本教程中的[迭代器](http://docs.python.org/2.7/tutorial/classes.html#iterators)和以下關於生成器的部分。這可能不是你要求的......但希望你會很快。 – abarnert

回答

2

你必須建立全文以某種方式。例如,你可以建立一個單詞列表:

pig_words = [] 

for word in sentence.split(): 
    if word[0] in VOWELS: 
     pig_latin = word + "ay" 
    else: 
     pig_latin = word[1:] + word[0] + "ay" 
    pig_words.append(pig_latin) 

return pig_words 

如果你希望把它放回句子中,split對面是join,所以只是最後一行改爲:

return ' '.join(pig_words) 
0

您需要將值附加到列表中,並從循環中刪除返回語句,以便在for循環完成迭代後它將返回列表。

words = [] 
for word in sentence.split(): 
    if word[0] in VOWELS: 
     pig_latin = word + "ay" 
    else: 
     pig_latin = word[1:] + word[0] + "ay" 

    words.append(pig_latin) 

return words 
0

您的返回語句是通過for循環的第一遍執行的。即使您不縮進return語句以結束運行,您也只會在pig_latin變量中包含最後一個翻譯的單詞。

要翻譯整個句子,只有在整個for循環運行完成後才能返回,保存已翻譯單詞的累積列表。

entensesay = [] 
for word in sentence.split(): 
    if word[0] in VOWELS: 
     entensesay.append(word + "ay") 
    else: 
     entensesay.append(word[1:] + word[0] + "ay") 
return ' '.join(entensesay) 

避免在Python中循環執行字符串連接也是一種好習慣。 List append方法更高效,然後使用''.join()來產生最終的連接字符串。

+0

關於字符串追加緩慢的說明實際上是過時的;二進制字符串連接行爲在Python 2.4中已經修復,大約十年前,但人們仍然在今天重複它... – abarnert