1. 基础

Python简介

   Python是一种计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化
脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。
    应用于以下领域:数据分析、Web开发、爬虫、人工智能、自动化运维等等

1.Python环境搭建

环境说明(windows环境)
软件环境:
	windows7及以上,64位系统
	Anaconda+Pycharm
	Pycharm:Python集成开发环境,类似Visual Studio
	Anaocnda: Python解释器
	安装目录名称:英文名称,不允许直接叫python
	安装目录:禁止放在磁盘盘符的根目录下,文件夹命名方式不允许关键字、库名重名
硬件环境:
	安装软件磁盘控件>4GB
	计算机内存条容练>4GB
软件下载地址:
    链接:https://pan.baidu.com/s/1Wya-zrTKeRCla7aJkKhhhQ 
	提取码:b6l9 

1.1 Anaconda环境搭建

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 设置Anaconda环境变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3 PyCharm安装

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.4 PyCharm激活

激活方式一:
    License Server: http://idea.imsxm.com/
激活方式二:
   激活码:
   2RRJMBXW33-eyJsaWNlbnNlSWQiOiIyUlJKTUJYVzMzIiwibGljZW5zZWVOYW1lIjoi5b285bK4IHNvZnR3YXJlMiIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiJGb3IgZWR1Y2F0aW9uYWwgdXNlIG9ubHkiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IklJIiwicGFpZFVwVG8iOiIyMDE5LTA3LTA3In0seyJjb2RlIjoiUlMwIiwicGFpZFVwVG8iOiIyMDE5LTA3LTA3In0seyJjb2RlIjoiV1MiLCJwYWlkVXBUbyI6IjIwMTktMDctMDcifSx7ImNvZGUiOiJSRCIsInBhaWRVcFRvIjoiMjAxOS0wNy0wNyJ9LHsiY29kZSI6IlJDIiwicGFpZFVwVG8iOiIyMDE5LTA3LTA3In0seyJjb2RlIjoiREMiLCJwYWlkVXBUbyI6IjIwMTktMDctMDcifSx7ImNvZGUiOiJEQiIsInBhaWRVcFRvIjoiMjAxOS0wNy0wNyJ9LHsiY29kZSI6IlJNIiwicGFpZFVwVG8iOiIyMDE5LTA3LTA3In0seyJjb2RlIjoiRE0iLCJwYWlkVXBUbyI6IjIwMTktMDctMDcifSx7ImNvZGUiOiJBQyIsInBhaWRVcFRvIjoiMjAxOS0wNy0wNyJ9LHsiY29kZSI6IkRQTiIsInBhaWRVcFRvIjoiMjAxOS0wNy0wNyJ9LHsiY29kZSI6IkdPIiwicGFpZFVwVG8iOiIyMDE5LTA3LTA3In0seyJjb2RlIjoiUFMiLCJwYWlkVXBUbyI6IjIwMTktMDctMDcifSx7ImNvZGUiOiJDTCIsInBhaWRVcFRvIjoiMjAxOS0wNy0wNyJ9LHsiY29kZSI6IlBDIiwicGFpZFVwVG8iOiIyMDE5LTA3LTA3In0seyJjb2RlIjoiUlNVIiwicGFpZFVwVG8iOiIyMDE5LTA3LTA3In1dLCJoYXNoIjoiOTUyNzQwMS8wIiwiZ3JhY2VQZXJpb2REYXlzIjowLCJhdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlLCJpc0F1dG9Qcm9sb25nYXRlZCI6ZmFsc2V9-WBR8xuiXaXLeV0obFYbBfUUQ02r54Vj3fE9ImtuXKSP+NuvvnR6lH6gWcVm9PZt67eqdDZa+Deej1NsoGRPDZS5UB6WEt4YVahlOhmG3rgvXPlP98hsfgFUcjr3OQVY7wk5slJ+Q2G9lkpsqwezO+SFIk9yA6pjxyT+U7FjpU8SY5ilsHskq4FG8FoKPYLsfsuwtXrJimRBxVcDClw/QsnCSwgtjuunc8Te37rHb08ZAxtJJieIsjhWnnzrQ3LmxmsR4xstkZOSqD4bYgeNz+m2nbmCWJ5lfP+pnqWfSsUCVri2TUxTpzzTMe4Cx8UhGeJgIgUyBXjq05/0nq3YoVg==-MIIEPjCCAiagAwIBAgIBBTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE1MTEwMjA4MjE0OFoXDTE4MTEwMTA4MjE0OFowETEPMA0GA1UEAwwGcHJvZDN5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQC9WZuYgQedSuOc5TOUSrRigMw4/+wuC5EtZBfvdl4HT/8vzMW/oUlIP4YCvA0XKyBaCJ2iX+ZCDKoPfiYXiaSiH+HxAPV6J79vvouxKrWg2XV6ShFtPLP+0gPdGq3x9R3+kJbmAm8w+FOdlWqAfJrLvpzMGNeDU14YGXiZ9bVzmIQbwrBA+c/F4tlK/DV07dsNExihqFoibnqDiVNTGombaU2dDup2gwKdL81ua8EIcGNExHe82kjF4zwfadHk3bQVvbfdAwxcDy4xBjs3L4raPLU3yenSzr/OEur1+jfOxnQSmEcMXKXgrAQ9U55gwjcOFKrgOxEdek/Sk1VfOjvS+nuM4eyEruFMfaZHzoQiuw4IqgGc45ohFH0UUyjYcuFxxDSU9lMCv8qdHKm+wnPRb0l9l5vXsCBDuhAGYD6ss+Ga+aDY6f/qXZuUCEUOH3QUNbbCUlviSz6+GiRnt1kA9N2Qachl+2yBfaqUqr8h7Z2gsx5LcIf5kYNsqJ0GavXTVyWh7PYiKX4bs354ZQLUwwa/cG++2+wNWP+HtBhVxMRNTdVhSm38AknZlD+PTAsWGu9GyLmhti2EnVwGybSD2Dxmhxk3IPCkhKAK+pl0eWYGZWG3tJ9mZ7SowcXLWDFAk0lRJnKGFMTggrWjV8GYpw5bq23VmIqqDLgkNzuoog==

1.5 创建工程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. Python基础

2.1 hello world

print('hello world!)

2.2 标识符、命名规则及关键字

2.2.1 标识符的概念

	标示符(IDentifier)是指用来标识某个实体的一个符号。在不同的应用环境下有不同的含义。
在日常生活中,标示符是用来指定某个东西、人,要用到它,他或她的名字;在数学中解方程时,
我们也常常用到这样或那样的变量名或函数名;

	在编程语言中,标识符是用户编程时使用的名字,对于变量、常量、函数、语句块也有名字;
我们统统称之为标识符。

2.2.2 标识符命名规则

	标示符由字母、下划线和数字组成,且数字不能开头
示例如下:
   fromNo12
	my_Boolean
	Obj2
	myInt
	test1
	Mike2jack
	My_tExt
	_test
	jack_rose
错误示例如下:
	from#12
	my-Boolean
	2ndObj
	test!32
	haha(da)tt
	int
	jack&rose
	G.U.I
	
注:python中的标识符是区分大小写的

在这里插入图片描述

2.2.3 标识符命名规则

1. 见名知意
	起一个有意义的名字,尽量做到看一眼就知道是什么意思(提高代码可 读性) 比如: 名字可以定义
为 name , 定义学生可以使用 student

2. 驼峰命名法
	小驼峰式命名法(lower camel case): 第一个单词以小写字母开始;第二个单词的首字母大写,
例如:myName、aDog
	大驼峰式命名法(upper camel case): 每一个单字的首字母都采用大写字母,例如:FirstName、
LastName

在这里插入图片描述

程序员中还有一种命名法比较流行,就是用下划线“_”来连接所有的单词,比如send_buf

2.2.4 关键字

	1. 什么是关键字
		python一些具有特殊功能的标示符,这就是所谓的关键字关键字,是python已经使用的了,
	所以不允许开发者自己定义和关键字相同的名字的标示符
	
	2. 所有关键字
	  and     as      assert     break     class      continue    def     del
      elif    else    except     exec      finally    for         from    global
      if      in      import     is        lambda     not         or      pass
      print   raise   return     try       while      with        yield
	注:也就是说这些关键字不能作为标识符使用
	
	3. 查看关键字
	import keyword
	print (keyword.kwlist)
	打印信息:
	['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 
	'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 
	'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 
	'while', 'with', 'yield']

2.2.5 变量赋值

Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
等号(=)用来给变量赋值。
等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。例如:
例1:
counter = 100          # 整型变量
miles   = 1000.0       # 浮点型变量
name    = "python"     # 字符串
print (counter)
print (miles)
print (name)
运行结果
100
1000.0
python

2.3 Python数据类型

在这里插入图片描述


Python3 中有六个标准的数据类型:
 - Number(数字)
 - String(字符串)
 - List(列表)
 - Tuple(元组)
 - Set(集合)
 - Dictionary(字典)

Python3 的六个标准数据类型中:
 - 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
 - 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

2.3.1 数字类型

① 整型:
	通常被称为是整型或整数,可以是正整数或负整数,不带小数点。Python3整型是没有限制大小的,可以当做long类型使用,但实际上由于
机器内存的有限,我们使用的整数是不可能无限大的。

整型的四种表现形式:
	2 进 制:以'0b'开头。例如:'0b11011'表示10进制的27
	8 进 制:以'0o'开头。例如:'0o33'表示10进制的27
	10进制:正常显示
	16进制:以'0x'开头。 例如:'0x1b'表示10进制的27
	
各进间数字进行转换(内置函数):
	bin(i):将i转换为2进制,以“0b”开头。
	oct(i):将i转换为8进制,以“0o”开头。
	int(i):将i转换为10进制,正常显示。
	hex(i):将i转换为16进制,以“0x”开头。
注意:
1. 在python2中 整型有大小限制
	在32位计算机上,整数位数是32位,取值范围为:-2**31~2**31-1,即-2147483648~214748364764位计算机上,整数位数是64位,取值范围为:-2**63~2**63-1,即-9223372036854775808~9223372036854775807
	超出这个范围的整型就是long2. Python有个特别的机制,它会在解释器启动时事先分配好一些缓冲区,这些缓冲区部分是固定好取值,例如整数[-5256]的内存地址是
   固定的。有些缓冲区可以重复利用。这样的机制使得python不需要频繁调用内存malloc和free

②浮点数:
 浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 102 = 250.0)

保留浮点数位数和整数补零的方法:
	最简单的格式如下:
a=1.333333344,将这个数保存为小数点后3'%.03f'%a
不过这样做返回的结果会变成一个字符串,显示为: 
'1.333'
所以只要再在前面加个float()即可返回正常浮点数,即:  
float('%.03f'%a)


关于浮点数精度处理:
	用Python3处理浮点数时会遇到处理精度的问题,例如:
>>> a = 2019.9102
>>> b = 666.333
>>> a - b
1353.5772000000002

>>> a = 2019.0428
>>> b = 1011.0823
>>> a - b
1007.9604999999999
上面两段代码中 a - b 得到的结果,显然都肉眼可见的存在误差.一般情况下,可以使用round()方法进行处理,:
>>> a = 2019.9102
>>> b = 666.333
>>> round(a - b, 4)
1353.5772

四舍五入,并保留到小数点后4,便可'解决'这个问题,那一大串不需要的数字消失了.但是round()函数也有个小陷阱,0.5案例:
>>> a = round(0.4)
>>> b = round(0.5)
>>> c = round(0.6)
>>> a, b, c
(0, 0, 1)
幸好,math模块中的提供了ceil()方法和floor()方法.
>>> import math
>>> a = 87.654321
>>> math.ceil(a)
88
>>> n = 2
>>> math.ceil(a*10**n)/(10**n)
87.66

>>> import math
>>> a = 12.345678
>>> math.floor(a)
12
>>> n = 2
>>> math.floor(a*10**n)/(10**n)
12.34

③布尔类型:
	所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布尔TrueFalse值。空对象,值为零的任何数字
或者Null对象None的布尔值都是False。在Python3中True=1False=0,可以和数字型进行运算。

下列对象的布尔值是FalseNoneFalse0(整型),0.0(浮点型);0L(长整形);0.0+0.0j(复数);“”(空字符串);[](空列表);()(空元组);
	{}(空字典)。

	值不是上列的任何值的对象的布尔值都是True,例如non-empty,non-zero等。用户创建的类实例如果是定义了nonzero(_nonzeor_())
或length(_len_())且值为0,那么它们的布尔值就是False。

 ④复数:
 	复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3.2 字符串

String(字符串)
	Python中的字符串用单引号 ' 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符。
字符串的截取的语法格式如下:
变量[头下标:尾下标]
索引值以 0 为开始值,-1 为从末尾的开始位置。

在这里插入图片描述

加号 + 是字符串的连接符, 星号 * 表示复制当前字符串,紧跟的数字为复制的次数。实例如下:
str = 'python'
 
print (str)          # 输出字符串
print (str[0:-1])    # 输出第一个到倒数第二个的所有字符
print (str[0])       # 输出字符串第一个字符
print (str[2:5])     # 输出从第三个开始到第五个的字符
print (str[2:])      # 输出从第三个开始的后的所有字符
print (str * 2)      # 输出字符串两次
print (str + "TEST") # 连接字符串

与 C 字符串不同的是,Python 字符串不能被改变。向一个索引位置赋值,比如word[0] = 'm'会导致错误。

注意:
1、反斜杠可以用来转义,使用r可以让反斜杠不发生转义。
2、字符串可以用+运算符连接在一起,用*运算符重复。
3、Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。
4、Python中的字符串不能改变

2.3.3 列表

List(列表)
	List(列表) 是 Python 中使用最频繁的数据类型。
	列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
	列表是写在方括号 [] 之间、用逗号分隔开的元素列表。
	和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。
	列表截取的语法格式如下:
	变量[头下标:尾下标]
索引值以 0 为开始值,-1 为从末尾的开始位置。

在这里插入图片描述

list = [ 'abcd', 786 , 2.23, 'python', 70.2 ]
tinylist = [123, 'python']
 
print (list)            # 输出完整列表
print (list[0])         # 输出列表第一个元素
print (list[1:3])       # 从第二个开始输出到第三个元素
print (list[2:])        # 输出从第三个元素开始的所有元素
print (tinylist * 2)    # 输出两次列表
print (list + tinylist) # 连接列表
注意:
1、List写在方括号之间,元素用逗号隔开。
2、和字符串一样,list可以被索引和切片。
3、List可以使用+操作符进行拼接。
4、List中的元素是可以改变的。

2.3.4 元组

Tuple(元组)
	元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,
元素之间用逗号隔开。
	元组中的元素类型也可以不相同:
tuple = ( 'abcd', 786 , 2.23, 'python', 70.2  )
tinytuple = (123, 'python')
 
print (tuple)             # 输出完整元组
print (tuple[0])          # 输出元组的第一个元素
print (tuple[1:3])        # 输出从第二个元素开始到第三个元素
print (tuple[2:])         # 输出从第三个元素开始的所有元素
print (tinytuple * 2)     # 输出两次元组
print (tuple + tinytuple) # 连接元组
string、listtuple 都属于 sequence(序列)。

注意
1、与字符串一样,元组的元素不能修改。
2、元组也可以被索引和切片,方法一样。
3、注意构造包含 01 个元素的元组的特殊语法规则。
4、元组也可以使用+操作符进行拼接。

2.3.5 集合

Set(集合)
	集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。
	基本功能是进行成员关系测试和删除重复元素。
	可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },
因为 { } 是用来创建一个空字典。
	创建格式:
	parame = {value01,value02,...}
	或者
	set(value)
	
示例:
tudent = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
print(student)   # 输出集合,重复的元素被自动去掉
# 成员测试
if 'Rose' in student :
    print('Rose 在集合中')
else :
    print('Rose 不在集合中')
# set可以进行集合运算
a = set('abracadabra')
b = set('alacazam')
print(a)
print(a - b)     # a 和 b 的差集
print(a | b)     # a 和 b 的并集
print(a & b)     # a 和 b 的交集
print(a ^ b)     # a 和 b 中不同时存在的元素

2.3.6 字典

Dictionary(字典)
	字典(dictionary)是Python中另一个非常有用的内置数据类型。
	列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取,
而不是通过偏移存取。
	字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) :(value) 的集合。
	键(key)必须使用不可变类型。
	在同一个字典中,键(key)必须是唯一的。
示例:
dict = {}
dict['one'] = "1 - python2"
dict[2]     = "2 - python3"
tinydict = {'name': 'python','code':1, 'site': 'www.python.com'}
print (dict['one'])       # 输出键为 'one' 的值
print (dict[2])           # 输出键为 2 的值
print (tinydict)          # 输出完整的字典
print (tinydict.keys())   # 输出所有键
print (tinydict.values()) # 输出所有值

注意:
1、字典是一种映射类型,它的元素是键值对。
2、字典的关键字必须为不可变类型,且不能重复。
3、创建空字典使用 { }

2.3.8 python格式化输出

Python3 格式化输出 %s & %d 等
1.打印字符串

print("My name is %s" %("Alfred.Xue"))
#输出效果:
My name is Alfred.Xue
2.打印整数

print("I am %d years old." %(25))
#输出效果:
I am 25 years old.
3.打印浮点数

print ("His height is %f m"%(1.70))
#输出效果:
His height is 1.700000 m
4.打印浮点数(指定保留两位小数)

print ("His height is %.2f m"%(1.70))
#输出效果:
His height is 1.70 m
5.指定占位符宽度

print ("Name:%10s Age:%8d Height:%8.2f"%("Alfred",25,1.70))
#输出效果:
Name:    Alfred Age:      25 Height:    1.70
6.指定占位符宽度(左对齐)

print ("Name:%-10s Age:%-8d Height:%-8.2f"%("Alfred",25,1.70))
#输出效果:
Name:Alfred     Age:25       Height:1.70
7.指定占位符(只能用0当占位符?)

print ("Name:%-10s Age:%08d Height:%08.2f"%("Alfred",25,1.70))
#输出效果:
Name:Alfred     Age:00000025 Height:00001.70
8.科学计数法

format(0.0026,'.2e')
#输出效果:
'2.60e-03'

字符串格式化代码

在这里插入图片描述

2.4 Python运算符

Python 语言支持的运算符包括:
	算术运算符、比较(关系)运算符、赋值运算符、逻辑运算符、位运算符、成员运算符和身份运算符。
	
运算通常可以根据最终获得的值不同,可以分两类,即:
	结果为具体的值---->算数运算、赋值运算,
	结果为bool值 —>比较运算、逻辑运算和成员运算。

2.4.1 Python 算术运算符

以下假设变量 a 为 10 ,变量 b 为 21 :

在这里插入图片描述

2.4.2 Python 比较运算符

以下假设变量 a 为 10 ,变量 b 为 20 :

在这里插入图片描述

2.4.3 Python 赋值运算符

以下假设变量 a 为 10 ,变量 b 为 20 :

在这里插入图片描述

2.4.4 Python 位运算符

按位运算符是把数字看作二进制来进行计算的。 Python 中的按位运算法则如下:

下表中变量 a 为 60 , b 为 13 二进制格式如下:

a   =   0011 1100

b    =    0000 1101

-----------------

a&b = 0000 1100

a|b = 0011 1101

a^b = 0011 0001

~a  = 1100 0011

在这里插入图片描述

2.4.5 Python 逻辑运算符

Python 语言支持逻辑运算符,以下假设变量 a 为 10 , b 为 20:

在这里插入图片描述

2.4.6 Python 成员运算符

除了以上的一些运算符之外, Python 还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。

在这里插入图片描述

2.4.7 Python 身份运算符

身份运算符用于比较两个对象的存储单元

在这里插入图片描述

需要注意的是, id() 函数用于获取对象内存地址。

运算符 is 与 == 有什么区别?
is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。例如:
>>> a = [1, 2, 3]

>>> b = a

>>> b is a

True

>>> b == a

True

>>> b = a[:]

>>> b is a

False

>>> b == a

True
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章