#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]))
на justchoice(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 =». Спасибо