Почему я получаю NoneType?

#python #matplotlib

#python #matplotlib

Вопрос:

Я пытаюсь написать фрагмент кода, который генерирует случайное блуждание для диаграммы рассеяния в pyplot, но продолжаю получать ошибку: TypeError: объект типа ‘NoneType’ не имеет len()

 from random import choice

class RandomWalk:
    def __init__(self, num_points=5000):
        self.num_points = num_points
        self.x_values = [0]
        self.y_values = [0]

   def get_step(self):
       step = (choice([x for x in range(20)])) * (choice([1, -1]))
       return step

   def fill_walk(self):
       while len(self.x_values) < self.num_points:
           x_step = self.get_step()
           y_step = self.get_step()

           if x_step == 0 and y_step == 0:
               continue

           self.x_values = self.x_values.append((self.x_values[-1]   x_step))
           self.y_values = self.y_values.append((self.y_values[-1]   y_step))
  

И это код сюжета:

 rw = RandomWalk(5_000)
rw.fill_walk()

plt.style.use('classic')
fix, ax = plt.subplots(figsize=(15, 9))
point_numbers = range(rw.num_points)
ax.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.rainbow, edgecolors='none', s=5)
ax.scatter(0, 0, c='green', edgecolors='none', s=100)
ax.scatter(rw.x_values[-1], rw.y_values[-1], c='red', edgecolors='none', s=100)
plt.show()
  

По какой-то причине self.x_values не передается, и я получаю TypeError для этой строки:

     while len(self.x_values) < self.num_points:
  

Есть идеи, почему это не передается?

Комментарии:

1. Проверьте ваш отступ в вашем классе randomWalk, методы не имеют правильного отступа

2. Примечание: (choice([x for x in range(20)])) это странный (и гораздо менее эффективный) способ написания choice(range(20)) . И если вы на самом деле не хотите 0 появляться в два раза чаще, чем любое другое число, лучшим решением было бы заменить все (choice([x for x in range(20)])) * (choice([1, -1])) на just choice(range(-19, 20)) .

3. Строка: self.x_values = self.x_values.append((self.x_values[-1] x_step)) присваивает None self.x_values .

4. @ShadowRanger Это действительно полезно знать. Приветствия

Ответ №1:

self.x_values = self.x_values.append(...)

Проблема в строке выше — append просто верните None

Комментарии:

1. Вот и все! Просто нужно было удалить «self.x_values =». Спасибо