初学者Python:累加器循环函数

时间:2013-09-21 03:09:44

标签: python string loops accumulator

我是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

2 个答案:

答案 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()