python之类的赋值及默认值报错:TypeError: object of type 'int' has no len()

在做分子热运动模拟时发现的问题:

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()

一如既往挂个结果

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值