Почему строка 34 возвращает: TypeError: 'int' не поддерживает индексацию - PullRequest
0 голосов
/ 11 июня 2019

Я не могу выполнить этот код из-за ошибки TypeError в следующей строке

t.goto (а [у]) (Кстати, я начинающий, поэтому, пожалуйста, опишите как можно больше)

    a = [(285.316954889, 92.7050983125),(242.705098312,176.335575688),(176.335575688, 242.705098312),(92.7050983125,285.316954889),(0.0, 300.0),(-92.7050983125, 285.316954889),(-176.335575688, 242.705098312),(-242.705098312, 176.335575688),(-285.316954889, 92.7050983125),(-300.0, 0.0),(-285.316954889,-92.7050983125),(-242.705098312, -176.335575688),(-176.335575688,-242.705098312),(-92.7050983125, -285.316954889),(0.0, -300.0),(92.7050983125, -285.316954889),(176.335575688, -242.705098312),(242.705098312, -176.335575688),(285.316954889, -92.7050983125),(300.0, 0.0)]

    y = 0

    for x in a:
     for b in range(20):
       t.goto(a[y])
       y = y + 1

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Эта ошибка связана с тем, что у вас есть 2 определения для a.

a = [(285.316954889, 92.7050983125),(242.705098312,176.335575688),(176.335575688, 242.705098312),(92.7050983125,285.316954889),(0.0, 300.0),(-92.7050983125, 285.316954889),(-176.335575688, 242.705098312),(-242.705098312, 176.335575688),(-285.316954889, 92.7050983125),(-300.0, 0.0),(-285.316954889,-92.7050983125),(-242.705098312, -176.335575688),(-176.335575688,-242.705098312),(-92.7050983125, -285.316954889),(0.0, -300.0),(92.7050983125, -285.316954889),(176.335575688, -242.705098312),(242.705098312, -176.335575688),(285.316954889, -92.7050983125),(300.0, 0.0)]

y = 0

for x in a:
 for a in range(20): <----- a is an integer
   t.goto(a[y])
   t.goto(0,0)
   y = y + 1

a начинается как список, но во втором цикле for становится целым числом. Строка t.goto(a[y]) пытается получить доступ к переменной integer a. Чтобы это исправить, просто переименуйте второй a следующим образом:

a = [(285.316954889, 92.7050983125),(242.705098312,176.335575688),(176.335575688, 242.705098312),(92.7050983125,285.316954889),(0.0, 300.0),(-92.7050983125, 285.316954889),(-176.335575688, 242.705098312),(-242.705098312, 176.335575688),(-285.316954889, 92.7050983125),(-300.0, 0.0),(-285.316954889,-92.7050983125),(-242.705098312, -176.335575688),(-176.335575688,-242.705098312),(-92.7050983125, -285.316954889),(0.0, -300.0),(92.7050983125, -285.316954889),(176.335575688, -242.705098312),(242.705098312, -176.335575688),(285.316954889, -92.7050983125),(300.0, 0.0)]

y = 0

for x in a:
 for b in range(20): <---- note the use of b
   t.goto(a[y])
   t.goto(0,0)
   y = y + 1
0 голосов
/ 11 июня 2019

, но все равно не работает

Избегайте грязного индексирования и просто переберите содержимое вашего массива:

import turtle as t

a = [(285.316954889, 92.7050983125), (242.705098312, 176.335575688),
     (176.335575688, 242.705098312), (92.7050983125, 285.316954889), (0.0, 300.0),
     (-92.7050983125, 285.316954889), (-176.335575688, 242.705098312),
     (-242.705098312, 176.335575688), (-285.316954889, 92.7050983125), (-300.0, 0.0),
     (-285.316954889, -92.7050983125), (-242.705098312, -176.335575688),
     (-176.335575688, -242.705098312), (-92.7050983125, -285.316954889), (0.0, -300.0),
     (92.7050983125, -285.316954889), (176.335575688, -242.705098312),
     (242.705098312, -176.335575688), (285.316954889, -92.7050983125), (300.0, 0.0)
]

t.penup()

for position in a:
    t.setheading(t.towards(position))
    t.goto(position)
    t.pendown()

t.exitonclick()
...