python 学习日记(一)

从原理到实现:在《图灵完备》中构建一个144*256像素、1536时钟刻/帧的视频播放器 本文详细解析了在《图灵完备》游戏中构建144*256像素、1536时钟刻/帧视频播放器的全过程。从图灵完备原理出发,通过分层架构设计、视频数据预处理和关键电路实现,展示了如何用基础电子元件模拟现代显卡功能。重点介绍了像素坐标定位系统和颜色数据处理流水线的优化方案,为游戏内复杂电子系统设计提供实践指导。 阅读详情

  这两天看完了python速成教程,从C++转到python确实有点不是很适应。主要是两种语言差别还是挺大的,下面我就先说说,我在转换过程中出现的一些问题。

1、python 的语言风格是脚本式的,语言侧重于解决问题,而不是语言本身,所以可以发现,对于变量(python里都是对象)的使用上来看,python要灵活很多,不需要像C++那样需要给定变量类型,可以直接就赋值,python解释器可以自动识别类型。


2、说到变量(对象),python中有一个非常重要的特性,那就是”动态类型“,意思是我们在使用对象的时候,不是直接使用变量本身,而是一个引用。如:

a = 3

a = "at"

a 可以用作不同数据类型,原理就是当一个变量没有引用指向对象时候,python会自动调用(destruct),删除对象内存


3、python中很重的是用缩进来确定语句的所属关系。具体上是这样的一个语句与另一个语句有4个空格差,那么这个语句就是属于上一个语句。

对于初学者来说,用惯了以括号为所属关系,python的缩进方式是非常容易出错的


4、语句块的一定要有冒号

比如 if ():

        else:

while():

for i in set :

def () :


5、python中比较重要的数据结构

1》、序列

序列有分为两种类型,一个是元组(tuple),还有一个是表(list),此外字符串是一个定值表。表里面的元素是可以改变的,但是定值表里面的元素是不可以改变。

元组:S = (1,2,3,4)

表: s1 = [1,2,3,4]

任何的序列都可以引用其中的元素(item)。

 

下面的内建函数(built-in function)可用于序列(表,定值表,字符串):

# s为一个序列

len(s)         返回: 序列中包含元素的个数

min(s)         返回: 序列中最小的元素

max(s)         返回: 序列中最大的元素

all(s)         返回: True, 如果所有元素都为True的话

any(s)         返回: True, 如果任一元素为True的话

 

下面的方法主要起查询功能,不改变序列本身, 可用于表和定值表:

sum(s)         返回:序列中所有元素的和

# x为元素值,i为下标(元素在序列中的位置)

s.count(x)     返回: x在s中出现的次数

s.index(x)     返回: x在s中第一次出现的下标


由于定值表的元素不可变更,下面方法只适用于表:

# l为一个表, l2为另一个表

l.extend(l2)        在表l的末尾添加表l2的所有元素

l.append(x)         在l的末尾附加x元素

l.sort()            对l中的元素排序

l.reverse()         将l中的元素逆序

l.pop()             返回:表l的最后一个元素,并在表l中删除该元素

del l[i]            删除该元素

(以上这些方法都是在原来的表的上进行操作,会对原来的表产生影响,而不是返回一个新表。)

 

下面是一些用于字符串的方法。尽管字符串是定值表的特殊的一种,但字符串(string)类有一些方法是改变字符串的。这些方法的本质不是对原有字符串进行操作,而是删除原有字符串,再建立一个新的字符串,所以并不与定值表的特点相矛盾。

#str为一个字符串,sub为str的一个子字符串。s为一个序列,它的元素都是字符串。width为一个整数,用于说明新生成字符串的宽度。

str.count(sub)       返回:sub在str中出现的次数

str.find(sub)        返回:从左开始,查找sub在str中第一次出现的位置。如果str中不包含sub,返回 -1

str.index(sub)       返回:从左开始,查找sub在str中第一次出现的位置。如果str中不包含sub,举出错误

str.rfind(sub)       返回:从右开始,查找sub在str中第一次出现的位置。如果str中不包含sub,返回 -1

str.rindex(sub)      返回:从右开始,查找sub在str中第一次出现的位置。如果str中不包含sub,举出错误

 

str.isalnum()        返回:True, 如果所有的字符都是字母或数字

str.isalpha()        返回:True,如果所有的字符都是字母

str.isdigit()        返回:True,如果所有的字符都是数字

str.istitle()        返回:True,如果所有的词的首字母都是大写

str.isspace()        返回:True,如果所有的字符都是空格

str.islower()        返回:True,如果所有的字符都是小写字母

str.isupper()        返回:True,如果所有的字符都是大写字母

 

str.split([sep, [max]])    返回:从左开始,以空格为分割符(separator),将str分割为多个子字符串,总共分割max次。将所得的子字符串放在一个表中返回。可以str.split(',')的方式使用逗号或者其它分割符

str.rsplit([sep, [max]])   返回:从右开始,以空格为分割符(separator),将str分割为多个子字符串,总共分割max次。将所得的子字符串放在一个表中返回。可以str.rsplit(',')的方式使用逗号或者其它分割符

 

str.join(s)                返回:将s中的元素,以str为分割符,合并成为一个字符串。

str.strip([sub])           返回:去掉字符串开头和结尾的空格。也可以提供参数sub,去掉位于字符串开头和结尾的sub  

str.replace(sub, new_sub)  返回:用一个新的字符串new_sub替换str中的sub

         

str.capitalize()           返回:将str第一个字母大写

str.lower()                返回:将str全部字母改为小写

str.upper()                返回:将str全部字母改为大写

str.swapcase()             返回:将str大写字母改为小写,小写改为大写

str.title()                返回:将str的每个词(以空格分隔)的首字母大写

 

str.center(width)          返回:长度为width的字符串,将原字符串放入该字符串中心,其它空余位置为空格。

str.ljust(width)           返回:长度为width的字符串,将原字符串左对齐放入该字符串,其它空余位置为空格。

str.rjust(width)           返回:长度为width的字符串,将原字符串右对齐放入该字符串,其它空余位置为空格。



金智维KRPA实战:Excel自动化数据处理全流程解析 本文详细解析了金智维KRPA在Excel自动化数据处理中的全流程应用,涵盖COM接口和文件读写两种核心技术方案,以及销售报表生成、数据清洗和可视化仪表盘等实战案例。通过企业级应用的异常处理、性能优化和安全合规实践,显著提升数据处理效率和准确性,助力企业降本增效。 阅读详情

相关推荐

保姆级教程:用rosbag录制和回放你的第一个ROS机器人数据(附C++/Python代码)

本文提供了一份详细的ROS机器人数据录制与回放教程,涵盖从命令行操作到C++/Python编程实现的全流程。通过rosbag工具,开发者可以高效记录和回放机器人运行时的传感器数据和控制指令,适用于故障复现、算法调试等多种场景。教程还包含高级技巧如时间同步和大文件处理,帮助用户快速掌握ROS数据管理核心技能。

weixin_29313239的博客 283

记录我的python学习日记(一)

皓同学的python学习日记(一)

qhdxoyy12345的博客 1097

SAP MM新手避坑指南:工厂间调拨用301还是303?手把手教你选对移动类型

本文深入解析SAP MM模块中工厂间调拨的301与303移动类型,帮助新手避开常见陷阱。通过对比一步法(301)和两步法(303+305)的核心差异、适用场景及财务影响,提供清晰的决策框架和实战技巧,确保库存调拨的准确性和效率。

weixin_29223603的博客 346

Python学习日志

Python学习笔记

SwanInK的博客 407

库卡机器人外部轴配置全流程:从接线到WorkVisual 6.0实战(附避坑指南)

本文详细解析了库卡机器人外部轴配置的全流程,涵盖从硬件接线到WorkVisual 6.0软件配置的实战步骤。重点介绍了KPP驱动模块连接、电机参数匹配、安全配置激活及零点标定等关键环节,并提供了实用的避坑指南,旨在帮助工程师高效、安全地完成外部轴集成,提升工作站柔性。

weixin_29161785的博客 497

安装keil5(MDK)及导入pack包教程

首先说明的是我安装的Keil版本为Keil V5.29.0.0 1、安装软件 右键管理员权限运行安装包 设置安装路径以及pack的存放路径 随意输入First Name和E-mail 安装驱动 完成软件安装,然后可以先关闭弹出的Pack Install(一会再添加) 2、激活一下软件 打开桌面的Keil File → License Management(我之前注册过了) 右...

hrx-@@ 10万+

python实验日记

实验2-1 num=input("任意自然数") print(sum(map(int,num))) 实验2-2 setA=eval(input("输入集合A:")) setB=eval(input("输入集合B:")) print('交',setA&setB) print( '并',setA|setB) print('差',setA-setB) 实验2-3 A=eval(input...

GHFR233的博客 1291

doris2.1.8连接报错ERROR 1203 (42000): Reach limit of connections解决办法

摘要:客户Doris数据库报错"ERROR 1203 (42000): Reach limit of connections"的解决过程。发现AI提供的解决方案存在错误:1)查询命令应为SHOW FRONTEND CONFIG而非show variables;2)参数名称应为qe_max_connection而非max_connections。正确解决步骤:1)用admin账户登录查看连接数限制和当前连接数;2)通过SHOW PROPERTY命令检查用户资源限制;3)针对不同情况修改参数

Brent的专栏 1762

python实训日志_最新Python实训周总结

__________________________________________________收集于网络,如有侵权请联系管理员删除Python实训周总结Python的学习到现在已经有半个月了,通过讲解与企业化标准的培训,使我加深了对python的认识。因为之前有学Java的基础,所以这次实训入门时也相对容易许多。这是我第一次接触到Python语言,但不是我学习的第一种编程语言。它的逻辑规则和...

weixin_39644377的博客 4510

NVIDIA Omniverse 技术浅析(二):USD

例如,一个用户可以负责场景的几何体设计,另一个用户可以负责材质和灯光的调整。USD 的开放性和可扩展性,结合 Omniverse 的 Kit 扩展框架,使得用户和开发者可以创建自定义的应用程序和工具,以满足特定的需求。USD 的材质和物理属性系统,结合 Omniverse 的 RTX 实时渲染技术,使得用户可以在虚拟环境中看到逼真的光影效果和物理模拟。USD 的时间轴和动画功能,结合 Omniverse 的物理属性系统,使得用户可以为虚拟环境中的元素创建复杂的动画和物理模拟。

m0_75253143的博客 446

10分钟搞定小红书爆款笔记爬取!Selenium模拟登录+数据解析全流程,新手也能落地

小红书爬虫实战的核心,是**“模拟真人操作+解析结构化数据”**——Selenium解决了动态页面和登录的问题,lxml解决了数据提取的问题,pandas解决了数据存储的问题。新手学爬虫不用一开始就啃复杂的反爬机制,先从这类“可见即可爬”的场景入手,掌握“模拟操作→数据解析→数据保存”的全流程,再逐步叠加异常处理、批量爬取、反爬应对等功能。需要注意的是:爬取数据仅用于个人学习和研究,不得用于商业用途,且需遵守小红书的用户协议,不要过度爬取导致服务器压力。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1729

Python学习日记一

  人生很迷茫呐,找不到自己有什么价值,只能先挖掘自己的潜力了,听朋友说没事写写博客什么的,能够加深记忆,可以更好的总结所学知识。不妨试一试?没事干总不能闲着吧,游戏又没人一起玩,逛街又不会逛街,看电影,追剧又容易睡觉。。。   一、了解Python   1、Python是一门解释型语言。解释型语言指的是源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行,即...

无迹可寻 3739

SAP-ABAP:SAP创建CDS视图(SQL语句创建)实例详解

通过Eclipse和ADT创建CDS视图是SAP开发中的一项重要技能。CDS视图不仅简化了数据建模,还提供了高性能和灵活性。掌握CDS视图的开发和使用,可以帮助你更好地支持SAP S/4HANA和Fiori应用的开发。

baidu_35680696的博客 1824

Python学习日记——加一

Python学习日记011——加一 题目来源:LeetCode题库——加一 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 Example1: 输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。 Example2: 输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。 链接:https://leetco

weixin_43872060的博客 627

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

python学习日记(一)

Python是通过缩进来判断语句的从属关系的。

vv12300的博客 682

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

python学习日记一

学习本片文章之后可以写一些简单的程序,这算是学习python的第一步。这一部分并没有什么需要复习,只需简单的练习,直接看下一章吧。

ddbdddb的博客 860

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

我的Python学习日记一

一、Python的介绍 1.简介 Python是一种解释型、面向对象的开发语言,由龟叔所创。 https://www.python.org 2.特点 1)简洁功能强大,但效率不高 2)可读性强 3)面向对象 4)免费开源 5)可移植性和跨平台 6)丰富的库 7)可扩展性强,可嵌入到C或者C++(胶水式语言) 3.版本兼容问题 Python现在有Python2和Python3,但是Python3不兼容Python2 4.Python解释器 Python程序的执行依赖于Python解释器,常用的Python解释

chenjinhong1990的博客 193

Python学习日记(一)

1.输出: print “xxx”  问题:   输出中文需要设置字符串编码 在文件开头加上 # -*- coding: UTF-8 -*-   注意:Python3.X 源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码。 2.语法  Python 标识符   在 Python 里,标识符由字母、数字、下划线组成。   在 Python 中,所有标识符可以包括英...

子冰吖的博客 1381

Python的学习日记(一)

摘要:作者分享初学Python的经历,通过头歌平台进行实时练习,发现英语函数名不熟悉且记忆困难,考虑是否需要加强英语学习或多练习。举例遇到split()函数使用问题,因多写空格导致半小时的调试。最终明白split()默认按空白分割,无需额外参数。学习过程总体顺利,但对先学英语还是多练习感到困惑,寻求建议。(150字)

u011058122的博客 257

python学习日记(一)

学习笔记

weixin_42896509的博客 332

生命在于学习——Python学习日记(一)

Python学习日记(一)

易水哲的博客 717
上一篇: UVA 591 - Box of Bricks
下一篇: python 学习日志(2)
LAI147
博客等级 码龄15年 1粉丝 13原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值