В чем разница между использованием list [num] и len (list [num]) в a для l oop? - PullRequest
0 голосов
/ 05 февраля 2020

В рамках проекта я должен создать игру памяти, которая включает в себя рандомизацию списка из 16 цифр (два одинаковых диапазона диапазона (7)) и печать этих цифр на холсте. Моя первая итерация имела значение для l oop, которое выбирает каждый номер списка и печатает его на холсте с заданным интервалом (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  

выходные данные из этого повторяют числа на холст, но когда я отлаживаю код, кажется, что он точно присваивает номера и не повторяет их. Программа работает правильно. Когда я заменил «full_list» на «range (len (full_list))» в for-l oop:

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  

, кто-то мог мне объяснить, почему работает вторая итерация и первый нет?

Спасибо большое!

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Разница в том, что 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  
0 голосов
/ 05 февраля 2020

Первая итерация по значениям исходного вектора si resulta не верна. Второй перебирает индексы, если вектор от единицы до максимальной длины si valúes правильный

...