Python简介
1.Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
2.Python的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序。
Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。
Python是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。
Python特点
1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。
2.易于阅读:Python代码定义的更清晰。
3.易于维护:Python的成功在于它的源代码是相当容易维护的。
4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。
5.互动模式:互动模式的支持,您可以从终端输入并获得结果的语言,互动的测试和调试代码片断。
6.便携式:Python可以运行在多种硬件平台和所有平台上都具有相同的接口。
7.可扩展:可以添加低层次的模块到Python解释器。这些模块使程序员可以添加或定制自己的工具,更有效。
8.数据库:Python提供所有主要的商业数据库的接口。
9.GUI编程:Python支持GUI可以创建和移植到许多系统调用。
10.可扩展性:相比 shell 脚本,Python 提供了一个更好的结构,且支持大型程序。
Python环境搭建
Python可应用于多平台包括 Linux 和 Mac OS X。一般的 Linux 发行版本都自带 Python,Mac OS X 最新版也自带了 Python,也就是已经安装好了,不需要再配置。
Windows 下直接下载最新版的 Python 2.7.9,安装的时候注意选择
你可以通过终端窗口输入 "python" 命令来查看本地是否已经安装Python以及Python的安装版本。
Python下载
Python最新源码,二进制文档,新闻资讯等可以在Python的官网查看到:
Python官网:http://www.python.org/
你可以在一下链接中下载Python的文档,你可以下载 HTML、PDF 和 PostScript 等格式的文档。
Python文档下载地址:www.python.org/doc/
Python安装
Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。
您需要下载适用于您使用平台的二进制代码,然后安装Python。
如果您平台的二进制代码是不可用的,你需要使用C编译器手动编译源代码。
编译的源代码,功能上有更多的选择性, 为python安装提供了更多的灵活性。
以下为不同平台上安装Python的方法:
Window 平台安装 Python:
以下为在 Window 平台上安装 Python 的简单步骤:
打开WEB浏览器访问http://www.python.org/download/
在下载列表中选择Window平台安装包,包格式为:python-XYZ.msi 文件 , XYZ 为你要安装的版本号。
下载后,双击下载包,进入Python安装向导,安装非常简单,你只需要使用默认的设置一直点击"下一步"直到安装完成即可。
python理论与实践
变量
什么是变量?
变量就是变化的量,核心是"变"和"量"两个字,变就是变化,量就是衡量状态。
为什么需要变量?
程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说保存下来程序执行时状态以及状态的变化。
如何定义变量
变量名(相当于门牌号,指向所在的空间),等号,变量值
name='Egon'
sex='male'
age=18
level=10
变量的定义规范
变量名只能是 字母、数字或下划线的任意组合
变量名的第一个字符不能是数字
关键字不能声明为变量名 ['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']
定义方式
驼峰体
AgeOfOldboy = 56
NumberOfStudents = 80
下划线
age_of_Oldboy = 56
number_of_students = 80
定义变量名不好的方式
变量名为中文、拼音
变量名过长
变量名词不达意
定义变量会有:id, type, value
定义变量会有:id, type, value
In [1]: x='info Egon:18'
In [2]: y='info Egon:18'
In [3]: id(x)
Out[3]: 139765292238000
In [4]: id(y)
Out[4]: 139765292268080
In [5]: x == y
Out[5]: True
In [6]: x is y
Out[6]: False
常量
常量即指不变的量,如 π 3.141592653... 或在程序运行过程中不会改变的量
举例,假如老师的年龄会变,那这就是个变量,但在一些情况下,他的年龄不会变了,那就是常量。在 Python 中没有一个专门的语法代表常量,程序员约定俗称用变量名全部大写代表常量
AGE_OF_OLDBOY = 56
PS:在c语言中有专门的常量定义语法, const int count = 60;一旦定义为常量,更改就会报错。
用户与程序交互
古时候,我们去银行取钱,需要一个银行业务元等着我们把自己的账号密码输入给他,然后他去进行验证,成功之后,我们再将取款金额输入/告诉她
骄傲的现代人,会为客户提供一台ATM(就是一台计算机),让ATM机跟用户交互,从而取代人力。然而机器是死的,我们必须为其编写程序来运行,就是要求我们的编程语言中能够有一种能与用户交互,接收用户输入数据的机制
#在 python3 中
input: 用户输入任何值,都存成字符串类型
#在 python2 中
input: 用户输入什么类型,就存成什么类型
raw_input: 等于 python3 的 input
注释
随着学习的深入,用不了多久,你就可以写复杂的上千甚至上万行的代码,有些代码你花费很久写出来,过了些天再回来看,发现竟然看不懂了,这太正常了。另外,你以后在工作中会发现,一个项目多是由几个甚至几十个开发人员一起做,你要调用别人写的代码,别人也要用你的,如果代码不加注释,你自己都看不懂,更别说别人了,这产会挨打的。所以为了避免这种尴尬的事情发生,一定要增加你代码的可读性。
代码注释分单行和多行注释,单行注释用#,多行注释可以用三对双引号 """"""
代码注释的原则:
不用全部加注释,主需要在自己觉得重要或不好理解的部分加注释就行
注释可以用中文或英文,但不要用拼音
文件头
1
2
#!/usr/bin/env python
-- coding: utf-8 --
基本数据类型
什么是数据?为啥要有多种类型的数据?
数据即变量的值,如 age=18,18 就是我们保存的数据。
变量的是用来反应/保持状态以及状态变化的,毫无疑问针对不同的状态就应该用不同类型的数据去标识
数字
int 整形
定义:age=10 #age=int(10)
用于标识:年龄,等级,×××号,qq号,个数
float 浮点型
定义:salary=3.1 #salary=float(3.1)
用于标识:工资,身高,体重
int(整形)
在 32 位计算机上,整数的位数为32位,取值范围为 -231~231-1,即-2147483648~2147483647
在 64 位计算机上,整数的位数为64位,取值范围为 -263~263-1,即-9223372036854775808~9223372036854775807
long(长整形)
跟C语言不同,Python的长整数没有指定位宽,即:Python 没有限制长整数数值的大小,但是实际由于机器的内存有限,我们使用的长整数数值不可能无限大
注意,自从 Python 2.2 起,如果整数发生溢出,Python 会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
注意:在 Python3 里不再有 long 类型了,全都是int
1
2
3
4
5
6
7
8
9
In [7]: a = 2**64
In [8]: type(a) # type() 是查看数据类型的方法
Out[8]: int
In [9]: b = 2**60
In [10]: type(a)
Out[10]: int
complex复数型
In [11]: x=1-2j
In [12]: x.imag
Out[12]: -2.0
In [13]: x.real
Out[13]: 1.0
字符串
在python中,加了引号的字符就是字符串类型,python并没有字符类型
定义:name='egon' #name=str('egon')
用于识别:描述性的内容,如姓名,性别,国际,种族
那单引号、双引号有什么区别呢?让我大声告诉你,单双引号没有任何区别,只有下面这种情况,你需要考虑单双的配合
msg = "My name is Egon, I'm 18 years old!"
多引号什么作用呢?作用就是多行字符串必须用多引号
msg = '''
今天我想写首小诗,
歌颂我的同桌,
你看他那乌黑的短发,
好像一只炸毛鸡。
'''
print(msg)
数字可以进行加减乘除运算,字符串呢?字符串也是可以的,但是只能进行"相加"和"相乘"的运算。
In [14]: name='egon'
In [15]: age='18'
In [16]: name+age #相加就是简单的拼接
Out[16]: 'egon18'
In [17]: name*5
Out[17]: 'egonegonegonegonegon'
注意1:字符串相加的效率不高
字符串1+字符串3,并不会在字符串1的基础上加字符串,而是申请一个全新的内存空间存入字符串1和字符串3,相当字符串1与字符串3的空间被复制了一次。
注意2:只能字符串加字符串,不能字符串加其他类型
列表
在[]内用逗号分隔,可以存放n个任意类型的值
定义:students=['egon', 'alex', 'wupeiqi',] #students=list(['egon', 'alex', 'wupeiqi',])
用于标识:存储多个值的情况,比如一个人有多种爱好
存放多个学生的信息:姓名,年龄,爱好
In [18]: students=[['egon', 18, ['play',]], ['alex', 18, ['play', 'sleep']]]
In [19]: students[0][2][0] #取出第一个学生的爱好
Out[19]: 'play'
字典
为啥还要用字典?
存放一个人的信息:姓名,性别,年龄,很明显是多个值,既然是存多个值,我们完全可以基于刚刚学习的列表去存放,如下
In [20]: info=['egon', 'male', 18,]
定义列表的目的不单单是为了存,还要考虑取值,如果我想取出个人的年龄,可以用
In [21]: info[2]
Out[21]: 18
但是基于我们已经知道在第3个位置存放的是年龄的前提下,我们才知道索引2对应的是年龄
name sex age
info=['egon', 'male', 18]
而这完全只是一种假设,并没有真正意义上规定第三个位置存放的是年龄,于是我们就要寻求一种,既可以存放多个任意类型的值,有可以硬性规定值的映射关系的类型,比如 key=value,这就用到了字典。
在{}内用逗号分隔,可以存放多个 key:value 的值,value 可以是任意类型
定义:info={'name':'egon','age':18,'sex':male} #info=dict({'name':'egon','age':18,'sex':'male'})
用于标记:存储多个值的情况,每个值都有唯一一个对应的key,可以更为方便高效的取值
info={
'name':'egon',
'hobbies':['play', 'sleep'],
'company_info':{
'name':'Oldboy',
'type':'education',
'employee_number':40,
}
}
print(info['company_info']['name']) #取公司名
students=[
{'name':'alex','age':38,'hobbies':['play','sleep']},
{'name':'egon','age':18,'hobbies':['read','sleep']},
{'name':'wupeiqi','age':58,'hobbies':['music','read','sleep']},
]
print(student[1]['hobbies'][1]) #取第二个学生的第二个爱好
布尔
布尔值,一个True一个False
计算机俗称电脑,即我们编写程序让计算机运行时,应该是让计算机无限接近人脑,或者说人脑能干什么,计算机就应该能干什么,人脑的主要作用是数据运行与逻辑运算,此处的布尔类型就模拟人的逻辑运行,即判断一个条件成立时,用True标识,不成立则用False标识
In [1]: a=3
In [2]: b=5
In [3]: a > b
Out[3]: False
In [4]: a < b
Out[4]: True
接下来就可以根据条件结果来干不同的事情了:
if a > b
print(a is bigger than b )
else
print(a is smaller than b )
上面是伪代码,但意味着,计算机已经可以想人脑一样根据判断结果不同,来执行不同的动作。
重点:
可变类型:在 id 不变的情况下,value 可以变,则称为可变类型,如列表,字典
不可变类型:value一旦改变,id也改变。则称为不可变类型(id变,意味着创建了新的内存空间)
格式化输出
程序中经常胡有这样的场景:要求用户输入信息,然后打印成固定的格式
比如要求用户输入用户名和年龄,然后打印如下格式:
My name is xxx, my age is xxx.
很明显,用逗号进行字符串拼接,只能把用户输入的名字和年龄放到末尾,无法放到指定的 xxx 位置,而且数字也必须经过 str(数字) 的转换才能与字符串进行拼接。
就用到了占位符,如:%s、%d
>> print('My name is %s, my age is %s' %('egon','18')) #%s字符串占位符:可以接收字符串,也可以接收数字
My name is egon, my age is 18
>> print('My name is %s, my age is %d' %('egon','18')) #%d是数字占位符:只能接收数字
Traceback (most recent call last):
File "<stdin>", line 1, in <module> # 报错
TypeError: %d format: a number is required, not str
>> print('My name is %s, my age is %d' %('egon',18))
My name is egon, my age is 18
>> name=input('your name: ')
your name: renkeju
>> age=input('your age: ') #用户输入18,会存成字符串18,无法传给%d
your age: 18
>> print('My name is %s, my age is %s' %(name, age))
My name is renkeju, my age is 18
>> print('My name is %s, my age is %d' %(name, age)) #age为字符串类型,无法传给%d,所以会报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str
name = 'renkeju'
age = 22
sex = 'male'
job = 'student'
print("""
----------- info of %s ------------
Name : %s
age : %d
sex : %s
job : %s
-------------- end ----------------
""" \
%(name, name, age, sex, job))
----------- info of renkeju ------------
Name : renkeju
age : 22
sex : male
job : student
-------------- end ----------------
基本运算符
计算机可以进行的运算有很多种,可不仅仅只有加减乘除这么简单,运算按种类可以分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,今天我们暂时只学习算数运算、比较运算、逻辑运算、赋值运算。
算数运算
以下假设变量: a=10, b=20
运算符 描述 实例
-
加 - 两个对象相加 a + b 输出结果 30
-
减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10
-
乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 200
/ 除 - x除以y b/a 输出结果2
% 取模 - 返回除法的余数 b % a 输出结果0
幂 - 返回x的y次幂 a b 为10的20次方,输出结果 1000000000000000000000// 取整除 - 返回商的整数部分 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0
比较运算
以下假设变量:a=10, b=20
运算符 描述 实例
== 等于 - 比较对象是否相等 (a == b) 返回 false
!= 不等于 - 比较两个对象是否不相等 (a != b) 返回 true
<> 不等于 - 比较两个对象是否不相等 (a <> b) 返回 true。这个运算符类似 !=
大于 - 返回x是否大于y (a > b) 返回 False。
< 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量
True和False等价。注意,这些变量名的大写 (a < b) 返回 True
= 大于等于 - 返回x是否大于等于y (a >= b) 返回 False
<= 小于等于 - 返回x是否小于等于y (a <= b) 返回 True
赋值运算
以下假设变量: a = 10, b = 20
运算符 描述 实例
= 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c
+= 加法赋值运算符 c += a 等效于 c = c + a
-= 减法赋值运算符 c -= a 等效于 c = c - a
= 乘法赋值运算符 c = a 等效于 c = c / a
/= 除法赋值运算符 c /= a 等效于 c = c / a
%= 取模赋值运算符 c %= a 等效于 c = c % a
**= 幂赋值运算符 c = a 等效于 c = c a
//= 取整除赋值运算符 c //= a 等效于 c = c // a
逻辑运算
运算符 描述 实例
and 布尔"与" - 如果x为False, x and y 返回 False, 否则它返回 y 的计算值 (a and b) 返回 true
or 布尔"或" - 如果x是True,它返回True,否则它返回y的计算值 (a or b) 返回 true
not 布尔"非" - 如果x为True,返回False。如果x为False,它返回True。 not(a and b)返回 False
身份运算
is 比较的是 id
而 == 比较的是值
流程控制之 if...else
既然我们编程的目的是为了控制计算机能够像人脑一样工作,那么人脑能做什么,就需要程序中有相应的机制去模拟。人脑无非是数学运算和逻辑运算,对于数学运算在上一节我们已经说过了。对于逻辑运算,即人根据外部条件的变化而做出不同的反应,比如:
如果: 女性的年龄大于30岁,那么:叫阿姨
if
age_of_girl=31
if age_of_girl > 30:
print('阿姨好')
if-else
如果:女人的年龄大于30岁,那么:叫阿姨,否则:叫×××姐
age_of_girl=18
if age_of_girl > 30:
print('阿姨好')
else:
print('×××好')
如果:女人的年龄大于等于18并且小于22岁并且身高大于170并且体重小于100并且是漂亮的,那么:表白,否则:叫阿姨
if-else-boolean
age_of_girl=18
height=171
weight=99
is_pretty=True
if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True:
print('表白...')
else:
print('阿姨好')
if-else-boolean-2
age_of_girl=18
height=171
weight=99
is_pretty=True
success=False
if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True:
if success:
print('表白成功,在一起')
else:
print('什么爱情不爱情的,爱nmlgb的爱情,爱nmlg啊...')
else:
print('阿姨好')
如果:成绩>=90,那么:优秀
如果成绩>=80且<90,那么:良好 如果成绩="">=70且<80,那么:普通
其他情况:很差
if-elif-else
score=input('>>: ')
score=int(score)
if score >= 90:
print('优秀')
elif score >= 80:
print('良好')
elif score >= 70:
print('普通')
else:
print('很差')
流程控制之 while 循环
while
i = 0
guess=input('guess a number:')
num=int(10)
guess=int(guess)
while i < 2:
if num == guess:
print("恭喜你,猜对了!")
break
elif guess > num:
print('大了')
guess = input('guess a number:')
guess = int(guess)
else:
print('小了')
guess = input('guess a number:')
guess = int(guess)
i+=1