2013-09-21 116 views
1

我是一名Python初學者,我有一個任務,我需要使用確定的循環,字符串累加器和串聯打印出歌曲。問題在於,我能夠在確定的循環中打印出每節(該歌曲假設3節歌曲,因此範圍設置爲3),並且在創建每節之前,它會要求用戶輸入動物,並且它是聲音(它的老麥克唐納)。我完成了第一部分的任務,即在用戶給出他們的輸入後打印每個節,但第二部分要求所有節(總共3節)連接成整首歌。所以最終的結果將是單獨的歌曲放在一首歌中。問題是,我如何使用累加器給我必須更新歌曲,然後在最後輸出整首歌曲? 附件是我的代碼(注意,這是Python的2.7.5)初學者Python:累加器循環函數

def main(): 


    for stanza in range(3): 
     animal = raw_input("What animal? ") 
     animalSound = raw_input("What sound does a %s make? " %(animal)) 

     print 
     print "\t Old MacDonald had a farm, E-I-E-I-O," 
     print "And on his farm he had a %s, E-I-E-I-O" %(animal) 
     print "With a %s-%s here - " %(animalSound, animalSound) 
     print "And a %s-%s there - " %(animalSound, animalSound) 
     print "Here a %s there a %s" %(animalSound, animalSound) 
     print "Everywhere a %s-%s" %(animalSound, animalSound) 
     print "Old MacDonald had a farm, E-I-E-I-O" 
     print 

回答

2

作者:「accumulator」,我假設你指的是你連續添加到前一個字符串的模式。這可以通過運營商+=進行。

通過「concatenation」,我假設你的意思是字符串運算符+

按照您自己的規則,您不允許%運營商。

你可能會做這種方式:

song = '' # Accumulators need to start empty 
for _ in range(3): # Don't really need the stanza variable 
    animal = raw_input("What animal? ") 
    animalSound = raw_input("What sound does a %s make? " %(animal)) 

    song += "Old MacDonald had an errno. EIEIO\n" 
    song += "His farm had a " + animal + " EIEIO\n" 
    song += "His " + animal + "made a noise: " + animalSound + "\n" 
print song 

我相信這是你的任務要求什麼,但意識到這將 不被認爲是「好」或「Python化」碼。特別是,字符串累積 效率低下 - 喜歡列表解析和str.join()

0

而不是打印每一行,把每行成一個列表。例如:

lyrics = ['\t Old MacDonald had a farm, E-I-E-I-O,', "And on his farm he had a %s, E-I-E-I-O" % animal, etc] 

然後,當你打印,使用str.join()方法,像這樣:

print '\n'.join(lyrics) 

打印在列表中的每個項目,由新線('\n')分離。

現在,隨着歌詞的列表,你可以再追加這到另一個列表,每個節將有每個節。環路之外,也許把這樣的:

stanzas = [] 

然後,內循環,這樣做:

stanzas.append(lyrics) 

在的末尾附加列表lyrics到另一個列表stanzas,所以循環,你將有三個列表stanzas。再一次,要打印列表中的每個項目,請使用str.join()

+0

感謝您的輸入,我相信它會工作,但由於我是初學者,我還沒有學會這些步驟,不能在代碼中使用它們。有沒有一種替代方法只使用連接,累加器和確定循環? –

+0

@ user2792907對不起,我想我無法幫到你 – TerryA