我的Python项目没有添加到列表中,len在调用后没有改变

时间:2011-06-24 04:10:07

标签: python

好吧,我正在进行各种各样的游戏......我已经完成了它的追加-_-

当我回电话并添加下一个项目(即#1后做#1)时,我在打印输出中只得到那个项目......

如:

>  1
You put your Hatchet into the bag
Press enter to add more items
['Hatchet']
>  
>  2
You put your Toothbrush into the bag
Press enter to add more items
['Toothbrush']

我希望这个包能够获得更多的物品,一旦行李达到三个物品,就会把我带到下一个“等级”。我似乎无法将物品添加到包中并将它们放在包中,然后监控不断增长的len(包)。如果我回拨len(行李),它总是回到1.这是因为我正在使用'返回'功能吗?或者是别的什么?我想我可以尝试编码,以便在输入一个项目之后进入一个带有新包的新列表(看起来像一堆过多的代码,但是会起作用)。我也非常有信心在这个脚本中有大量过多的代码,我对Python非常陌生并且正在从一本书中完成一项任务/练习。我提前感谢你的帮助!!

def beginning():
    print 'Hello'

def func():
    firstitem=raw_input(">  ")
    bag=[]
    limit=len(bag)
    a="Hatchet"
    b="Toothbrush"
    c="Map"

    if firstitem=="1":
        bag.insert(1, 'Hatchet')
        print 'You put your %s into the bag' % a
        print 'Press enter to add more items'
        print bag
        limit=len(bag)
        if limit == int(3):
            beginning()
        item=raw_input(">  ")
        return func()
    if firstitem=="2":
        bag.insert(2, 'Toothbrush')
        print 'You put your %s into the bag' % b
        print 'Press enter to add more items'
        print bag
        limit=len(bag)
        if limit == int(3):
            beginning()
        item=raw_input(">  ")
        return func()
    if firstitem=="3":
        bag.insert(3, 'Map')
        print 'You put your %s into the bag' % c
        print 'Press enter to add more items'
        print bag
        limit=len(bag)

    if limit == int(3):
            beginning()
        item=raw_input(">  ")
        return func()

好的,如果我制作新的功能。是现有的吗?还是全新的?

3 个答案:

答案 0 :(得分:2)

您的问题是,您正在向bag添加内容,但之后您又会再次进入func的开头,其范围不同。然后,它会将[]分配给bag,并将其留空。您可以做的是让func采用可选参数:

def func(bag=None):
    if bag is None:
        bag = []
    # ...
    return func(bag)

此外,append可能在这里做的正确。

答案 1 :(得分:0)

包是一个列表而不是一个字典。如果要将项添加到列表中,则应使用append。

答案 2 :(得分:0)

你总是在包列表中只有一个项目的原因是因为你每次调用函数时都重新创建它,所以你需要找到一种如何正确初始化它的方法。在你的情况下,最好使用append而不是insert。请在下面找到我的示例代码(不确定以这种方式编写代码是个好主意 - 所以不要因此而打扰我太多):

def beginning():
    print 'Hello'
    return []

def func(bag):
    item = raw_input("Enter your choice here >  ")
    limit = len(bag)
    things = {'1':"Hatchet", '2':"Toothbrush", '3':"Map", '77':'Leave', '100':'backward'}
    if things.get(item).lower() == 'leave':
        print 'Bye'
        return
    elif things.get(item).lower() == 'backward':
        while len(bag)!=0:
            print bag, bag.pop()
        return
    bag.append(things.get(item))
    print 'You put your %s into the bag' % things.get(item)
    print 'Press enter to add more items'
    print bag
    if len(bag) == 3:
        bag = beginning()
    return func(bag)

func(beginning())