我是python的初学者,我有一个作业,我需要使用一个明确的循环,一个字符串累加器和连接来打印一首歌。问题是,我能够在一个明确的循环中打印出每一节(该歌曲假定为3节,因此范围设置为3),并且在创建每个节之前,它要求用户输入动物并且它是声音(它的老麦克唐纳)。我完成了作业的第一部分,即在用户输入后打印出每个节,但第二部分要求将所有节(总共3个)连接成整首歌。所以最终的结果就是将各个节放在一起成为一首歌。问题是,我如何使用累加器给出我必须更新歌曲然后在结尾输出整首歌曲? 附件是我的代码:(注意这是python 2.7.5)
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
答案 0 :(得分: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
等
我相信这是你的任务所要求的,但我意识到这会
不被认为是“好”或“Pythonic”代码。特别是字符串积累
效率低下 - 更喜欢列表推导和str.join()
。
答案 1 :(得分: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)
此将<{em>}列表lyrics
附加到另一个列表stanzas
,因此在循环结束时,您将在stanzas
中有三个列表。再次,要打印列表中的每个项目,请使用str.join()
。