0

作为该项目的一部分,我应该构建一个记忆游戏,其中涉及随机化 16 位数字列表(两个相同的 range(7) 范围)并将这些数字打印到画布上。我的第一次迭代有一个 for 循环,它选择列表的每个数字并以设定的间隔 (middle_cell_point) 将其打印到画布上,如下所示:

def draw(canvas):

    middle_counter = 1

    for num in full_list:

        canvas.draw_text(str(full_list[num]), (((middle_cell_point * middle_counter)) 
                          - (middle_cell_point/2) , HEIGHT/2), 22, "Red")
        middle_counter += 1  

此输出在画布上重复数字,但是当我调试代码时,它似乎准确地分配了数字并且似乎没有重复任何数字。程序正常工作当我在 for 循环中用“range(len(full_list))”替换“full_list”时:

def draw(canvas):

    middle_counter = 1

    for num in range(len(full_list)):

        canvas.draw_text(str(full_list[num]), (((middle_cell_point * middle_counter)) 
                              - (middle_cell_point/2) , HEIGHT/2), 22, "Red")
        middle_counter += 1  

有人可以向我解释为什么第二次迭代有效而第一次无效吗?

非常感谢!

4

2 回答 2

1

不同之处在于for num in full_list列出项目并for num in range(len(full_list))列出索引。

为了显示:

>>> full_list = ['a', 'b', 'c']
>>> list(full_list)
['a', 'b', 'c']
>>> list(range(len(full_list)))
[0, 1, 2]

在您的情况下,您想使用num而不是full_list[num]

def draw(canvas):

    middle_counter = 1

    for num in full_list:

        canvas.draw_text(str(num), (((middle_cell_point * middle_counter)) 
                                    - (middle_cell_point/2) , HEIGHT/2), 22, "Red")
        middle_counter += 1  
于 2020-02-04T23:40:03.737 回答
0

第一个迭代初始向量 si resulta 的值不正确。如果从 1 到最大长度 si 值的向量正确,则第二个遍历索引

于 2020-02-04T23:41:33.470 回答