在做分子热运动模拟时发现的问题:
import matplotlib.pyplot as plt
from random import choice as choice
class Molecular_thermal_motion():
def __init__(self,x_values=[0],y_values=[0],lentgh_move=5000):
self.x_values = x_values #为什么这里只能写[0]???
self.y_values = y_values #同上
self.lentgh_move = lentgh_move #为什么这里又可以了?
def molecular_move(self):
while len(self.x_values) < self.lentgh_move:
x_direction = choice([-1,1])
x_length = choice([0,2,4,6,8])
x_step = x_direction * x_length
y_direction = choice([-1,1])
y_length = choice([0,2,4,6,8])
y_step = y_direction * y_length
if x_step==0 and y_step==0:
continue
x_next = self.x_values[-1] + x_step
y_next = self.y_values[-1] + y_step
self.x_values.append(x_next)
self.y_values.append(y_next)
rw = Molecular_thermal_motion(0,0,5000)
rw.molecular_move()
plt.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False)
plt.plot(rw.x_values,rw.y_values,linewidth=1,c='blue')
plt.show()
错误处已注释,尝试修改类:
import matplotlib.pyplot as plt
from random import choice as choice
class Molecular_thermal_motion():
def __init__(self,x_values=[0],y_values=[0],lentgh_move=5000):
self.x_values = x_values
self.y_values = y_values
self.lentgh_move = lentgh_move
def molecular_move(self):
print(self.x_values)
rw = Molecular_thermal_motion(0,0,5000)
rw.molecular_move()
得到:
>>>
================= RESTART: C:\Users\28654\Desktop\idle可擦除脚本.py =================
0
>>>
经过其他测试得出,原来类在初始化时会读取列表、元组、字符串内的整型变量进行赋值处理而不是把列表元组字符串整个拿出来赋值,因此只能在赋值时进行数据处理,如下:
import matplotlib.pyplot as plt
from random import choice as choice
class Molecular_thermal_motion():
def __init__(self,x_values=0,y_values=0,lentgh_move=5000):#记住初始化只会读取整型
self.x_values = [x_values] #在此才能对整型进行处理
self.y_values = [y_values] #同上
self.lentgh_move = lentgh_move
def molecular_move(self):
while len(self.x_values) < self.lentgh_move:
x_direction = choice([-1,1])
x_length = choice([0,2,4,6,8])
x_step = x_direction * x_length
y_direction = choice([-1,1])
y_length = choice([0,2,4,6,8])
y_step = y_direction * y_length
if x_step==0 and y_step==0:
continue
x_next = self.x_values[-1] + x_step
y_next = self.y_values[-1] + y_step
self.x_values.append(x_next)
self.y_values.append(y_next)
rw = Molecular_thermal_motion(0,0,5000)
rw.molecular_move()
plt.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False)
plt.plot(rw.x_values,rw.y_values,linewidth=1,c='blue')
plt.show()
一如既往挂个结果