Python为什么把我的列表当作元组?

1 投票
1 回答
1724 浏览
提问于 2025-04-17 22:18

我有一个叫做 step_segment 的列表。它绝对不应该是一个元组。

当我在我的 main 程序中按下“7”时,我得到了:

Traceback (most recent call last):
  File "G:\programming\python\new_globals.py", line 205, in <module>
    main()
  File "G:\programming\python\new_globals.py", line 203, in main
    pick_random(STATS, step_segment, seen, master)
  File "G:\programming\python\new_globals.py", line 125, in pick_random
    step_segment, STATS = take_step(step_segment, STATS)
  File "G:\programming\python\new_globals.py", line 69, in take_step
    step_segment.append(STATS)
AttributeError: 'tuple' object has no attribute 'append'

这个错误只在调用 pick_random() 的时候出现:

def pick_random(STATS, seen, master):
    step_segment = []
    #if len(seen) >= 256:
    #   return seen, master
    while (len(step_segment)) < 128:
        step_segment, STATS = take_step(step_segment, STATS)
        if STATS[5] == "B":     # when there's a battle:
            randy = random.choice([0,1])
            if randy == 1:      # choose randomly between G and B
                step_segment = do_fight(step_segment, STATS)
            else:
                step_segment = do_glitch(step_segment, STATS)
            seen = seen + [STATS[0],STATS[5]]
    #if step_segment not in master:
        master.append(step_segment)
    time = get_frames(step_segment)
    print seen
    print time
    #return pick_random(STATS, seen, master)
    return seen, master

完整代码在这里: http://pastebin.com/fZgqtxZn

相关问题:

1 个回答

4

do_flight() 返回一个包含两个元素的元组:

return step_segment, STATS

但是你没有正确地解包这个元组:

step_segment = do_fight(step_segment, STATS)

之后,step_segment 就变成了一个元组。

你可能是想写:

step_segment, STATS = do_fight(step_segment, STATS)

作为一般建议,你可能想保持你的方法签名一致,以避免这种错误,或者学习一些面向对象编程的知识,这样你就不需要到处传递相同的变量了。

撰写回答