妄想成为大佬的小白-我-的Python学习之路

本文详细介绍了Python学习的四个阶段:环境搭建、数据类型、变量和运算符、程序控制结构。从安装Python环境,到理解基本和组合数据类型,如整型、浮点型、布尔型、字符串、列表、元组、集合和字典。接着,讨论了变量的使用、回收和命名规则,以及各种运算符,包括赋值、算数、逻辑、成员和标识运算符。最后,介绍了输入输出和程序控制结构,如选择结构(if...else)和循环结构(for...in, while)的概念和应用。" 79810561,6860137,Android数据处理:XML、JSON解析与SQLite操作,"['Android开发', 'XML', 'JSON', '数据库', 'SQLite', '数据处理']
摘要由CSDN通过智能技术生成

(一)Python入门——环境的搭建
(二)Python入门——数据类型
(三)Python入门——变量和常见运算符
(四)Python入门——程序控制—选择结构

(一)Python入门——环境的搭建

当我们要进行Python的学习时,最好的学习方法就是理论学习和操作实践相结合,一方面这样可以使你更好的去吃透理论知识,另一方面操作完之后也能让你印象深刻。不管是哪种语言,在对其进行实践操作时都需要环境,因此我们学习一门计算机操作语言前都要先安装好语言所需的环境,而对新手来说,环境安装是非常非常重要的必经之路,毕竟一个环境安装得好能为新手减去很多不必要的麻烦,比如pip这些烦人的拓展包。

安装过程

在安装之前我们要去下载python的安装包:
在这里插入图片描述
这里给出一些下载地址,大家可以根据学习的需要下载相应的版本,我下载的是python-3.6.1-amd64.exe这个版本

  1. 双击安装包,出现如下的开始安装界面,选择自定义安装选项:在这里插入图片描述
  2. 选项设置,默认全部勾选即可:在这里插入图片描述
  3. 高级配置选项,如图勾选即可:在这里插入图片描述
  4. 安装过程中…: 在这里插入图片描述
  5. 安装完成,最后的结束界面中,一定要点击 Disable Path Length Iimit,禁用系统的 Path 长度自动限制,能给我们避免很多的麻烦: 在这里插入图片描述
  6. 安装完成之后进入开始菜单中,找到 python3.6,然后点击 IDLE 就可以打开一个 python 的界面工具啦

(二)Python入门——数据类型

程序的概述 :
计算机程序,其实质就是计算机按照一定的顺序思路来解决问题的一种方式。
计算机程序,我们通常会解释说是由指令和代码组成,同样也可以说是由数据结构和算法组成;其实这两种说法的核心意义都是一样的,都是通过一系列有序的操作来完成数据的
处理过程。

不论任何用来开发程序的编程语言,都有这样的解决问题的各种程序基础操作,基础操作需要理解的是:程序是用于解决实际问题的,解决问题的核心在于处理数据,处理数据的
话,就得具备以下四个方面才能正常完成简单数据处理:
➢ 用于表示各种不同数据的类型:数据类型
➢ 用于临时存储数据的容器:变量
➢ 用于进行不同的数据之间的数学运算:运算符
➢ 用于根据不同的条件进行不同的功能处理的:程序结构(三大流程)
所有的这些方面在 python 中,以数据结构的方式进行了提供和使用的方式。
数据结构
什么是数据结构?
通过一定的方式组织在一起的数据元素的集合,这些数据可以是数字或者字符、也可以是任意一种数据结构类型,这里需要注意的是:python 中最基本的数据类型是序列python 中包含 6 种内建的数据序列:列表、元组、字符串、Unicode 字符串、buffer 对象和 xrange 对象
程序设计开发基本要素:

  1. 数据类型
    基本数据类型
    组合数据类型
  2. 变量
    普通变量
    对象引用
  3. 操作符
    赋值运算符
    逻辑操作符
    算数操作符
    关系运算符
  4. 输入/输出
  5. 程序结构:
    顺序结构
    选择结构
    循环结构
  6. 函数的创建/使用

基本数据类型:

基本数据类型就是 python 内置的可以直接使用的数据类型。
包含了如下几种:
➢ 整型 Integer(不可变类型)
➢ 浮点类型(不可变类型)
➢ 布尔类型 Boolean(不可变类型)
➢ 字符串(不可变类型)
下面我们来看看这四个基本数据类型:
1.整型 Integer(不可变类型)
整数类型,一般情况下都是使用整数数字来表示类型的数据。

我们定义了两个变量,变量的名称分别为num1和num2,num1值是10,num2值是20,注意在编程语言中,=是赋值符,将右侧的值赋给左侧,num1和num2的类型都是整数类型,之后用print函数将我们定义的num1和num2打印出来

num1 = 10
num2 = 20
print(num1)
print(num2)

我们也可以去电脑的cmd使用id内置方法来查看变量:
在这里插入图片描述
这个也可以看出变量就是一块用来存放数据的内存

注意:变量一旦定义好并赋值 10 后,这个 10 不允许修改的。但是可以给 num1重新赋值: 在这里插入图片描述
2.浮点类型 Float(不可变类型)
浮点类型(小数类型),可以通过添加小数点的方式来表示小数、也可以保存复数等等。

比如我们要计算半径为 5 的圆的面积 ,我们需要定义pi=3.141592653,r=5,再用print输出print(pi * r * r)。

pi = 3.141592653
r = 5
print(pi*r*r)

在这里插入图片描述
3.布尔类型 Boolean(不可变类型)
布尔类型,一种特殊的数据类型,在 python 中可以取值为 True 或者 False(首字符大写),用于表示只有两种结果的情况,如灯是否开着为例,True 表示开着,False 表示关着。

我们定义res为布尔类型变量分别来展示,定义res = True,这表示灯被打开了,输出print(res); res = False,这表示灯被关了,输出print(res);
在这里插入图片描述
4.字符串(不可变类型)
python中,字符串是包含在一对单引号或者双引号中的一串字符。

我们定义name = “计类1903陈振富”,输出print(name);再重新定义name = ‘我与春风皆过客,你携秋水揽星河’,输出print(name)
在这里插入图片描述
基本数据类型部分,目前我们先掌握这些基础的使用,以后的综合项目中,会详细的对使用方式进行介绍的

组合数据类型

在基本数据类型之后,我们下面来看组合数据类型。python 中为了方便一部分相似数据的处理,提供了各种组合类型,常见的如列表、元组、字典等组合数据类型。
python 中的列表是可变序列,元组是不可变序列。

列表 List

列表的语法结构:通过一堆方括号包含起来的数据序列,可以存放重复数据。
users = [“刘德华”,“张学友”,“郭富城”,“黎明”]
在这里插入图片描述
因为列表本身也是对象,所以可以进行嵌套处理
users = [[“刘德华”,“50”],[“张学友”,“48”],[“郭富城”,“51”],[“黎明”,‘47’]]
在这里插入图片描述
列表数据的查看,可以通过索引/下标进行查看(下标从 0 开始),也可以通过多级访问到列表的内部
users[2]
在这里插入图片描述
这可以类比c语言的数组

列表的常用方法

➢ append
列表中追加数据:append()
在这里插入图片描述
➢ insert(index,data)
列表中指定位置(第一个参数就是要插入数据的索引位)追加数据:insert()
在这里插入图片描述
➢ pop()
删除列表末尾的元素:pop()
在这里插入图片描述
➢ pop(index)
删除列表中指定位置的元素:pop(index)
在这里插入图片描述
如果我们要将列表中指定位置的数据进行替换,直接给对应的索引赋值:
在这里插入图片描述
至此,常见的列表操作就基本介绍结束了,后续更加细致的操作手段和方式,就需要我们在项目中进行深入练习的时候熟练了

元组 Tuple

元组在 python 中,其实是列表的一种特殊的形式,一旦声明创建就不允许改变。
语法结构:使用一对圆括号包含起来的一组数据,可以存放重复数据。

我们定义name = (‘仁’,“义”,“礼”,“智”,“信”);name[2]这可以通过索引查找对应的值
在这里插入图片描述由于元组的数据一旦定义就不可更改,在一定程度上提高了代码的安全性,所以在程序设计开发的过程中,对于一部分不需要更改的数据如果可以定义成元组的,不要定义成列表了,如果有同学接触过其他的编程语言,如 java或者C,会发现元组和枚举类型很类似。
注意:元组中如果存放的是其他的内容可变的元素的话,一定要注意此时的元组中对象的数据是可变的。
比如:
我们定义group = (“孙悟空”,“唐僧”,“沙僧”,[“猪八戒”,‘高老庄’]);
group[3][0]=“如来”,因为第四个参数是 list,可以变化,所以能修改
group[3][1]=‘灵山’,因为第四个参数是 list,可以变化,所以能修改
此时group是(‘孙悟空’, ‘唐僧’, ‘沙僧’, [‘如来’, ‘灵山’])
group[2]=[“玉皇大帝”,“天庭”] ,因为第三个参数是元组,不能修改,所以系统会报错。
在这里插入图片描述

集合 Set

在python中,系统还提供了一种特殊的数据类型,集合 Set,和列表类似,但是不能存储相同的数据。注意:集合 set 中存放数据是不能重复的,并且是没有存放顺序的,也就是没有下标的。
语法结构:使用一对大括号/花括号包含起来的一组数据
我们定义han = {“刘备”,“曹操”,“孙权”},先打印han,再打印han[1],因为集合中没有顺序,所以它是没有下标的,这样一来我们打印han[1]时会出错:
在这里插入图片描述
当然列表也可以转换为集合,我们配置的语法为:
集合名称 = set([‘将列表转换成集合’]);
在这里插入图片描述

集合的常用方法

集合中增加数据:add()
我们在集合liang中再加一个数据,比如liang.add(“鲁智深”);
在这里插入图片描述集合中删除数据:remove()
我们在集合liang中删除刚刚加的数据,liang.remove(“鲁智深”);
在这里插入图片描述

字典 Dict

为了方便数据在组合数据类型中的管理,python 还提供了一种特殊存储数据的组合数据类型:字典。通过 key-value 键值对的形式来存储数据,可以很方便的通过 key 来对 value进行增删改查的操作
语法结构:字典变量名称={“变量 1”:”值 1”, “变量 2”:”值 2”, “变量 3”:”值 3”,}
定义的时候以键值对的形式定义存在,相当于给每个值取了名字:
list = {“可爱” : “陈振富”, “好看的小姐姐” : “我们班女孩”, “野王” : “韩信李白老虎玄策阿珂悟空” }
在这里插入图片描述查询字典中的数据,我们可以通过名称键(即变量名)来查找值,使用方括号或者 get()函数:
在这里插入图片描述修改字典中指定的数据,通过给指定的key(也指变量)直接赋值就可以修改:
在这里插入图片描述
删除字典中的数据,通过删除指定的key对应的数据即可删除
在这里插入图片描述

以上四种数据类型的比较

➢ 元组 Tuple 是存放固定的数据
➢ 集合 Set 中的数据插入和遍历的时间,随数据增多而变慢
➢ 列表 List 中的数据插入和查询的时间,随数据的增多而变慢
➢ 字典 Dict 中的数据插入和查询的速度非常快,不会因为数据太多而变慢
元组、集合和列表占用内存较少,字典占用内存较多,字典是一种通过占用空间来换取操作速度的一种数据类型。

(三)Python入门——变量和常见运算符

变量:变量就是用来临时存放数据的一个容器

变量的使用

python中的变量,不需要声明即可使用
python中的变量命名:驼峰命名法,见名知意,只能是字母、数字和下划线组成,变量第一个字符只能是字母或者下划线。
比如我们定义userName = “陈振富”,显然这表示用户名称,因此我们使用驼峰法定义可以使变量清晰明了,再比如price = 50.23,我们定义了一个价格;_age = 18这里我们定义了一个年龄
在这里插入图片描述

变量的回收

变量一旦定义,在程序中也是使用内存空间来存储数据的,所以当变量一旦不在需要使用,需要删除变量释放它占用的内存空间,python中通过 del 关键字来删除变量。
比如我们用del userName把刚才定义的名字变量删除,删除后再次打印系统就会报错:
在这里插入图片描述这里一定要注意,在 Python中,认为一切都是对象,所以变量进行赋值时,其实就是python在内存中创建了这个对象,然后将对象在内存中的地址存储在变量中了。
我们可以通过内置的 id 方法来测试。
id(price)打印出来的2432011561680就表示 price 中存放的内存地址,在重新赋值price=20之后内存地址发生了变化,变成了140735343466752
在这里插入图片描述
注意:
➢ python将所有的数据都存储为内存对象,变量其实就是指向对象的一个引用,只要需要,就可以让变量随时引用一个不同的对象
➢ python内置了函数 type(),用于检测给定数据的数据类型
➢ 使用赋值符=等号,用来将一个变量和内存中的对象绑定起来,如果对象在内存中存在就直接绑定,否则赋值运算符后面的对象会被即时创建之后进行绑定。
那就存在问题了,创建的100和200这两个数据,内存中进行了什么样的处理的呢?
python将这样没有引用变量指向的对象,回收到了对象缓冲池(PS:对象缓冲池也是内存中的一个区域),方便下次使用的时候直接获取,所以在使用python的时候,一定要注意内存泄漏的问题。关于python内存管理这一部分,后续我们会单独进行讲解。

变量的命名规则

  1. 只能包含字母、数字、下划线,且不能以数字开头
  2. 变量名称区分大小写,name和Name就是两个不同的变量
  3. 禁止使用python2和python3的关键字和保留字
  4. 变量命名尽量有意义,一看就能明白该变量指的是什么

特殊变量

  1. 以一个下划线开头的变量名称,不会被import语句导入,如_username
  2. 前后各有下划线的变量名,是系统定义的变量名,有特殊含义,如_user_
  3. 交互模式下,单个下划线中保存了最后的输出表达式的结果,这个我们后面再说

操作符

操作符,就是用于进行数据运算的符号,常见的操作符一般有赋值运算符、算数运算符、逻辑运算符、关系运算符等等。

赋值运算符

在这里插入图片描述
此外还有次方赋值运算符和地板除法运算符
在这里插入图片描述

算数运算符

在这里插入图片描述注意:
➢ 在Python2中,除法运算和地板除法运算是一个结果,除非是加上一句 – from future import division,向后兼容,此时python2的结果和python3就一致了,这个其实是为了向3过渡,大家知道就行了。
➢ 在python3中,除法运算和地板除法运算结果不一样

逻辑运算符

在这里插入图片描述注意:
这里的逻辑运算符,python中只有and|or|not,在其他语言中,也有类似&&、||、!的符号来表示 and、or、not 的三种关系的
➢ and/&&:并且运算,当运算符两边的数据都为True才返回True,否则返回False
➢ or/||:或者运算,当运算符两边的数据都是False才返回False,否则返回True
➢ not/!:非运算,对结果进行取反,如果为True结果为False,如果为False则结果为True

成员运算符

成员运算符,主要用于判断某个成员是否出现在某个对象中。
users = [‘蔡徐坤’,‘王一博’,‘李现’,‘吴亦凡’];
im = ‘蔡徐坤’
im in users
True #这表示蔡徐坤在 users 中
czf = ‘陈振富’
czf in users
False ##表示陈振富不在这个列表中
‘蔡徐坤’ in users
True #表示蔡徐坤在这个list中
在这里插入图片描述

标识运算符

标识运算符,主要用于两个不同的变量数据类型的检测。
我们定义a=12,b=12,当检测a is b时结果为:True;当检测a is not b时结果为:False。
在这里插入图片描述

输入输出

python中的输入输出,在初学 python 的时候是比较有用的一个交互操作方式,主要用于人机交互。

数据输出

python2.x通过print语句和print()函数进行数据输出,习惯上使用print语句的人更多些,python3.x通过print()函数进行数据输出,建议大家使用print()函数进行输出,python3是将来的趋势

数据输入

python2.x 通过 raw_input()函数进行提示输入,用户输入的数据,可以通过函数的返回值进行接收,方便后续的使用,如:name = raw_input(“请输入您的用户名称:”) 。
python3.x 通过 input()函数进行提示输入,用户输入的数据,同样可以通过函数的返回值进行接收方便后续的使用,如:name = input(‘请输入您的用户名称:’)

python 中的输入输出

python 提供了 3 种输入输出标准文件对象,分别为标准输入、标准输出和标准错误;分别对应了 sys 模块中的sys.stdin,sys.stdout,sys.std.err。

在python中,print()函数用于实现数据的展示输出,其实底层是 print()打印函数将文件数据输出到sys.stdout标准输出并添加了一定的格式,如转换为文本格式等等;print()函数
同样也可以将数据输出到指定的文件中。
print()函数接受打印输出使用逗号分隔的对象列表,在行位会默认添加一个换行符号,如果不想换行,那么最后一个元素的后面添加一个逗号即可!

扩展:格式化输出

print()函数可以通过指定格式来输出对应的数据。
语法:print("expression %format , %format " %(variable1, variable2))

这里的%format 表示格式化占位字符,variable 表示用于替换占位字符的变量。
在这里插入图片描述
%后面紧跟着的就是格式化字符,语法结构如下:

%[[(name)] [flag] [width] [.precision]]typecode
name:位于括号中的一个属于后面的字典的键的名称,用于选择一个具体项
flag:一个标识位

  1. [-]表示左对齐,默认右对齐
  2. [+]表示数字显示符号,正数前面会自动添加+,负数自动添加-
  3. [0]空白字符使用 0 进行填充
    width:用于指定当前占位符的数据占用多少个字符的宽度
    precision:小数点,用于按照精度分割字段的宽度

常见的格式化字符如下:

格式化字符描述
d/i十进制整数或者长整数
u无符号整数或长整数
o八进制整数或长整数
x十六进制整数或长整数
X十六进制整数(大写字母)
f浮点数,如3.1415926
e浮点数 ,如5.1415e±10
E浮点数,如5.1415E±10
g/G指数小于-4或者更高精度时使用%e或者%E否则使用%f
s字符串或任意对象,格式化代码使用str()生成字符串表示形式
r同repr()生成的字符串
c单个字符
%字面量%

(四)Python入门——程序控制—选择结构循环结构

三大流程

➢ 顺序结构:按照顺序依次逐行执行代码的过程。自左向右,自上而下。
➢ 选择结构:程序按照不同的条件执行不同的处理代码的过程。
➢ 循环结构:程序按照指定的条件,如果条件满足就重复指定一端处理代码的过程。

在任何一门编程语言中,必不可少的需要三大流程(顺序、选择、循环),为什么呢?因为在真正开放中我们的代码总是有运行顺序的,其实我们的代码总是遵循这样一个运行顺序:自左向右,自上而下。这个也是三大流程中的顺序运行代码。然而代码有时候仅仅这样是不够的,如我们有时候需要判断一下情况,如果成立了我们就如何运行,如果不成立了又如何运行,这个就是选择结构。有时候我们需要重复执行一些代码好些次,那么我们就需要循环执行对应的代码,这个就是循环流程。顺序流程没什么可说的,只要知道就行了,所以今天的重点就是选择和循环流程。

选择流程

正常情况下,我们完成一件事情的过程中,可能会存在多种条件限制。
如:要进入教室,如果有钥匙则开锁进入,没有钥匙则进入不了,需要找钥匙。这样的情况下,需要根据不同的条件,执行不同的逻辑处理过程,反映在我们的程序中也是一样的,也就是我们接下来要说的程序结构。

选择结构及其语法

expression是一个表达式判断条件,表达式执行结果为 True 或者 False
if expression:选择结构中执行的代码,代码缩进4个空格,也就是一个Tab键[强制规范]
executor code

分支案例

res = input("请你输入1-7 数字,表示今天星期几:"); 
res = input("请你输入1-7 数字,表示今天星期几:"); 
 
# 单分支 if 
# if res == "1": 
#  print("今天星期%s"%res);  
# 双分支 if--else 
# if res == "1": 
#  print("今天星期一"); 
# else: 
#  print("今天不是星期一"); 
 
# 多分支 if--elif--else 
if res == "1": 
 print("今天星期一"); 
elif res == "2": 
 print("今天星期二"); 
elif res == "3": 
 print("今天星期三"); 
elif res == "4": 
 print("今天星期四"); 
elif res == "5": 
 print("今天星期五"); 
elif res == "6": 
 print("今天星期六");
 elif res=="7" : 
 print("今天星期天"); 
else: 
 print("你输入了错误的数字");

注意:python中不提供switch-case语法结构

循环结构

程序结构中的循环结构,用于重复执行一段相同处理逻辑的代码。
如:要计算 1~10 的加法运算,我们常规的可以通过 1+2+…+10 来进行编码运算;但是1~100 甚至 1~10000 的叠加运算,普通的编码方式就不适合了,此时就需要用到循环结构
python 提供了两种循环结构
➢ for [variable] in [list] 循环
➢ while [expression] 循环

下面,就两种循环分别进行讲解:

1.for…in 循环结构

for…in循环的语法结构如下:
for 变量 in 一组数据的列表
//直接使用变量,这里的变量每次就是一个列表中的元素
比如:users = [“陈振富”,“嘻嘻”,“哈哈”,“嘿嘿”]
现在我们要打印这个列表的四个元素,事实上这四个还好,我们也可以一个一个打印出来,但是如果有一百个一万个那我们打印的工作量就太大了,我们可以输for u in users(其中的u只是我定义的变量,无特殊含义,定义成其他形式也行)让系统自动打印出来。
在这里插入图片描述同样的,我们也可以使用 python 内置的函数来动态生成列表,对动态列表也是可以循环进行处理的。

# 求 0—100 的和: 
sum = 0 #申明一个变量为 0 
#range()函数能生成一个从 0 开始的列表,每次加一。最后一个值比传递的参数少一 
#如 range(5),则生成 0,1,2,3,4。注意 
for i in range(101):  
 sum += i 
print("0--100 的和是:%d"%sum) 
#运行结果是: 5050 
# 求 1—10 的积: 
sum = 1; 
for i in range(10): 
 sum *= (i+1) 
print("1--100 的积是:%d"%sum) 
#运行结果是: 3628800 
2.while 循环结构

python 为了方便通过条件进行数据的循环控制,提供了while 循环,当条件满足时重复执行,当条件不满足时跳出循环。
while 循环语法结构:
while 条件表达式:
//循环体中的代码

# 以登录用户名和密码为例 

#输入用户名称 
username = ''; 
#输入用户密码 
password = "";
#状态判断的标示符 
status = False; 
 
while username != "admin" or password != "123456": 
 if status:  
  print("您输入的用户名称或者密码错误!!,请再次输入!!"); 
 username = input("请输入您的用户名称:"); 
 #输入用户密码 
 password = input("请输入你的密码:"); 
 status = True; 
 print(username+"---"+password) 
print("登录成功"); 
3.break 关键字

break 关键字,主要用在循环体的代码中,用于在满足一定条件时跳出循环。
如:计算1~100的和,如果一旦出现 20,代码则跳出不在执行。

sum = 0; 
for i in range(101): 
 if i == 20: 
  break; 
 sum += i; 
# str 可以讲一个数字转换为字符串,那么字符串就可以拼接了,否则会报错的 
# 如:print("此时 sum="+sum); #会报错 
# 只能使用 print("此时 sum=%d"%sum); 
print("此时 sum="+str(sum)); 

我们在项目开发过程中,经常会遇到类似的情况,如果一旦要在一定条件满足时终止循环,这个时候我们就可以使用break来终止代码的继续循环了。

4.continue 关键字

continue 关键字和 break 关键字一样,都是用来控制循环的,不同的是 continue 关键字,它更多的用于满足条件后终止本次循环之后进入下一次循环。
如:计算1–100的和,但是如果遇到偶数不做任何处理:

# 求 1-100 的奇数的和 
sum = 0;  
for i in range(101): 
 if i % 2 == 0: 
  continue; 
 sum += i; 
print("1-100 的奇数的和是:"+str(sum)); 
# 结果为:2500 

总结

在程序设计开发的过程中,作为程序最基本的选择结构和循环结构,特别是编写基础代码的过程中,它占据了非常重要的地位,因此对这两部分的内容的操作我们要非常熟练。
1.选择结构
python只是提供了一种if选择结构,极大程度的简化了根据条件进行不同数据处理逻辑的控制
2. 循环结构
➢ python 提供了 for…in 循环结构和 while 循环结构
➢ for…in 循环结构注重于对固定数据列表的循环遍历和使用
➢ while 循环结构注重于对循环条件的判断来执行循环的过程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值