一、python介绍和学习目标
python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆开始写Python语言的编译器。Python这个名字,来自Guido所挚爱的电视剧Monty Python’s Flying Circus。他希望这个新的叫做Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。
算法能力、数据结构、建模能力、设计模式、编程艺术、代码规范这六项是未来重点培养提升的地方。
1、python的特点
最新的TIOBE排行榜,Python赶超PHP占据第4。Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言,可做软件开发、人工智能、web开发等等。
1)一门面向对象的语言;
2)拥有丰富的库;
3)可移植性好;
4)免费、开源;
5)简单易学。
2、目前Python主要应用领域
- 云计算: 云计算最火的语言, 典型应用OpenStack涵盖了庞大的技术生态(数据中心、运维、高可用、虚拟化技术、存储、网络技术...),还有庞大的项目集(计算服务Nova、块存储服务Cinder、对象存储Swift、编排服务Heat、裸机服务Ironic、容器编排服务Magnum),包含开发、运维、实施、售前等发展方向
- WEB开发: 最火的Python web框架Django, 支持异步高并发的Tornado框架,短小精悍的flask,bottle, Django官方的标语把Django定义为the framework for perfectionist with deadlines(大意是一个为完全主义者开发的高效率web框架)
- 网络编程: 支持高并发的Twisted网络框架, py3引入的asyncio使异步编程变的非常简单
- 科学运算、人工智能: 典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas,Python越来越适合于做科学计算、绘制高质量的2D和3D图像。和科学计算领域最流行的商业软件Matlab相比,Python是一门通用的程序设计语言,比Matlab所采用的脚本语言的应用范围更广泛
- 系统运维: 运维人员必备语言,自动化运维方向
- 金融:量化交易,金融分析,在金融工程领域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测
- 图形GUI: PyQT, WxPython,TkInter
- 游戏开发:在网络游戏开发中Python也有很多应用。相比Lua or C++,Python 比 Lua 有更高阶的抽象能力,可以用更少的代码描述游戏业务逻辑,与 Lua 相比,Python 更适合作为一种 Host 语言,即程序的入口点是在 Python 那一端会比较好,然后用 C/C++ 在非常必要的时候写一些扩展。Python 非常适合编写 1 万行以上的项目,而且能够很好地把网游项目的规模控制在 10 万行代码以内。
二、编程语言和分类
编程语言总体分以为机器语言、汇编语言、高级语言三类。
1、机器语言
计算机内部只能接受二进制代码,因此,用二进制代码0和1描述的指令称为机器指令,全部机器指令的集合构成计算机的机器语言,用机器语言编程的程序称为目标程序。只有目标程序才能被计算机直接识别和执行。
机器语言属于低级语言,机器语言编写的程序无明显特征,难以记忆,不便阅读和书写,且依赖于具体机种,局限性很大。现在仅限计算机生产厂家的专业人员学习使用。
2、汇编语言
汇编语言虽然指令采用了英文缩写的标识符,更容易识别和记忆,但它的实质和机器语言是相同的,都是直接对硬件操作。它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作,例如移动、自增。
缺点:汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识。
优点:用汇编语言所能完成的操作不是一般高级语言所能够实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。
特点:重视运行效率而不是开发效率,可以让人理解底层工作原理。
3、高级语言
高级语言主要是相对于汇编语言而言,高级语言将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。
特点:高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行。
1、编译类
编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行(编译后生成的可执行文件,是cpu可以理解的2进制的机器码组成的),使用比较方便、效率较高。如C、C++、Delphi等
优点:编译后程序运行时不需要重新翻译,直接使用编译的结果就行了。
缺点:程序执行效率高,依赖编译器,跨平台性差些。
2、解释类
执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器(想运行,必须先装上解释器,就像跟老外说话,必须有翻译在场),但这种方式比较灵活,可以动态地调整、修改应用程序。如Python、Java、PHP、Ruby等语言。
优点:跨平台好,一份代码,到处使用
缺点:执行速度慢,依赖解释器运行
4、编程语言总结
机器语言——优点是最底层,速度最快,缺点是最复杂,开发效率最低
汇编语言——优点是比较底层,速度最快,缺点是复杂,开发效率最低
高级语言——编译型语言执行速度快,不依赖语言环境运行,跨平台差
解释型跨平台好,一份代码,到处使用,缺点是执行速度慢,依赖解释器运行
三、变量和常量
1、变量定义的规则
- 变量名只能是 字母、数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 以下关键字不能声明为变量名
['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、变量定义规范
驼峰体:
AgeOfStudent = 56
NumberOfStudents = 80
下划线:
age_of_student = 56
number_of_students = 80
常量即指不变的量,如pai 3.141592653..., 或在程序运行过程中不会改变的量,Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量。
四、格式化输出
程序中经常会有这样场景:要求用户输入信息,然后打印成固定的格式。比如要求用户输入用户名和年龄,然后打印如下格式:
My name is xxx,my age is xxx.
很明显,用逗号进行字符串拼接,只能把用户输入的名字和年龄放到末尾,无法放到指定的xxx位置,而且数字也必须经过str(数字)的转换才能与字符串进行拼接。
%s就是代表字符串占位符,除此之外,还有%d是数字占位符。
#%s字符串占位符:可以接收字符串,也可接收数字 print('My name is %s,my age is %s' %('egon',18)) #%d数字占位符:只能接收数字 print('My name is %s,my age is %d' %('egon',18)) print('My name is %s,my age is %d' %('egon','18')) #报错 #接收用户输入,打印成指定格式 name=input('your name: ') age=input('your age: ') #用户输入18,会存成字符串18,无法传给%d print('My name is %s,my age is %s' %(name,age)) #注意: #print('My name is %s,my age is %d' %(name,age)) #age为字符串类型,无法传给%d,所以会报错
练习:用户输入姓名、年龄、工作、爱好 ,然后打印成以下格式 ------------ info of Egon ----------- Name : Egon Age : 22 Sex : male Job : Teacher ------------- end ----------------- # -*- coding:utf-8 -*- __author__ = 'Qiushi Huang' # 练习:用户输入姓名、年龄、工作、爱好 ,然后打印成以下格式 def func(): name = input('用户姓名:') age = input('用户年龄:') job = input('用户工作:') sex = input('用户性别:') print('info of Egon'.center(30, '-')) print('Name : %s' % name) print('Age : %s' % age) print('Sex : %s' % sex) print('Job : %s' % job) print('end'.center(30,'-')) func()
五、运算符
运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算等。
1、算数运算
以下假设变量:a=10,b=20
2、比较运算
以下假设变量:a=10,b=20
3、赋值运算
4、逻辑运算
#三者的优先级从高到低分别是:not,or,and >>> 3>4 and 4>3 or 1==3 and 'x' == 'x' or 3 >3 False #最好使用括号来区别优先级,其实意义与上面的一样 >>> (3>4 and 4>3) or ((1==3 and 'x' == 'x') or 3 >3) False
5、身份运算
is比较的是id;而==比较的是值。
六、流程控制——if...else
1、单分支
if 条件: 满足条件后要执行的代码
示例:如果女人的年龄>30岁,那么叫阿姨。
age_of_girl=31 if age_of_girl > 30: print('阿姨好')
2.双分支
if 条件: 满足条件执行代码 else: if条件不满足就走这段
示例:如果女人的年龄>30岁,则叫阿姨,否则叫小姐
age_of_girl=18 if age_of_girl > 30: print('阿姨好') else: print('小姐好')
示例:如果女人的年龄>=18且<22且身高>170且体重<100而且漂亮,则表白,否则叫阿姨
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('阿姨好')
3.多分支
if 条件: 满足条件执行代码 elif 条件: 上面的条件不满足就走这个 elif 条件: 上面的条件不满足就走这个 elif 条件: 上面的条件不满足就走这个 else: 上面所有的条件不满足就走这段
示例:根据用户输入内容打印其权限
''' egon --> 超级管理员 tom --> 普通管理员 jack,rain --> 业务主管 其他 --> 普通用户 ''' name=input('请输入用户名字:') if name == 'egon': print('超级管理员') elif name == 'tom': print('普通管理员') elif name == 'jack' or name == 'rain': print('业务主管') else: print('普通用户')
七、流程控制——while循环
循环语句是为了做到不写重复代码又能让程序重复一段代码多次。
1、条件循环:while,语法:
while 条件: # 循环体 # 如果条件为真,那么循环体则执行,执行完毕后再次循环,重新判断条件。。。 # 如果条件为假,那么循环体不执行,循环终止
示例代码:
#打印0-10 count=0 while count <= 10: print('loop',count) count+=1 #打印0-10之间的偶数 count=0 while count <= 10: if count%2 == 0: print('loop',count) count+=1 #打印0-10之间的奇数 count=0 while count <= 10: if count%2 == 1: print('loop',count) count+=1
2、死循环
有一种循环叫死循环,一经触发,就运行个天荒地老、海枯石烂。
while 是只要后边条件成立(也就是条件结果为真)就一直执行,怎么让条件一直成立呢?
count = 0 while True: #True本身就是真呀 print("你是风儿我是沙,缠缠绵绵到天涯...",count) count +=1
3、循环中止语句(breakcontinue)
如果在循环的过程中,因为某些原因,你不想继续循环了,怎么把它中止掉呢?这就用到break 或 continue语句:
- break用于完全结束一个循环,跳出循环体执行循环后面的语句
- continue和break有点类似,区别在于continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环
#break用于退出本层循环 while True: print "123" break print "456" #continue用于退出本次循环,继续下一次循环 while True: print "123" continue print "456"
4、while+else
与其它语言else 一般只与if 搭配不同,在Python 中还有个while ...else 语句,while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句。
count = 0 while count <= 5 : count += 1 print("Loop",count) else: print("循环正常执行完啦") print("-----out of while loop ------") 输出 Loop 1 Loop 2 Loop 3 Loop 4 Loop 5 Loop 6 循环正常执行完啦 -----out of while loop ------
如果执行过程中被break,则不会再执行else语句。
count = 0 while count <= 5 : count += 1 if count == 3:break print("Loop",count) else: print("循环正常执行完啦") print("-----out of while loop ------") 输出 Loop 1 Loop 2 -----out of while loop ------
5、while循环练习题
#1. 使用while循环输出1 2 3 4 5 6 8 9 10 #2. 求1-100的所有数的和 #3. 输出 1-100 内的所有奇数 #4. 输出 1-100 内的所有偶数 #5. 求1-2+3-4+5 ... 99的所有数的和 #6. 用户登陆(三次机会重试) #7:猜年龄游戏 要求: 允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出 #8:猜年龄游戏升级版 要求: 允许用户最多尝试3次 每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y或y, 就继续让其猜3次,以此往复,如果回答N或n,就退出程序 如何猜对了,就直接退出
答案:
#题一 count=1 while count <= 10: if count == 7: count+=1 continue print(count) count+=1 count=1 while count <= 10: if count != 7: print(count) count+=1 #题目二 res=0 count=1 while count <= 100: res+=count count+=1 print(res) #题目三 count=1 while count <= 100: if count%2 != 0: print(count) count+=1 #题目四 count=1 while count <= 100: if count%2 == 0: print(count) count+=1 #题目五 res=0 count=1 while count <= 5: if count%2 == 0: res-=count else: res+=count count+=1 print(res) #题目六 count=0 while count < 3: name=input('请输入用户名:') password=input('请输入密码:') if name == 'egon' and password == '123': print('login success') break else: print('用户名或者密码错误') count+=1 #题目七 age_of_oldboy=73 count=0 while count < 3: guess=int(input('>>: ')) if guess == age_of_oldboy: print('you got it') break count+=1 #题目八 age_of_oldboy=73 count=0 while True: if count == 3: choice=input('继续(Y/N?)>>: ') if choice == 'Y' or choice == 'y': count=0 else: break guess=int(input('>>: ')) if guess == age_of_oldboy: print('you got it') break count+=1
八、流程控制——for循环
1、迭代式循环:for,语法如下
for i in range(10): 缩进的代码块
2、break与continue(同上)
3、for循环嵌套
示例1:打印九九乘法表
for i in range(1,10): for j in range(1,i+1): print('%s*%s=%s' %(i,j,i*j),end=' ') print()
示例2:打印金字塔
#分析 ''' #max_level=5 * #current_level=1,空格数=4,*号数=1 *** #current_level=2,空格数=3,*号数=3 ***** #current_level=3,空格数=2,*号数=5 ******* #current_level=4,空格数=1,*号数=7 ********* #current_level=5,空格数=0,*号数=9 #数学表达式 空格数=max_level-current_level *号数=2*current_level-1 ''' #实现 max_level=5 for current_level in range(1,max_level+1): for i in range(max_level-current_level): print(' ',end='') #在一行中连续打印多个空格 for j in range(2*current_level-1): print('*',end='') #在一行中连续打印多个空格 print()
4、for...else
for语句是python中的循环控制语句。可用来遍历某一对象,还具有一个附带的可选的else块,主要用于处理for语句中包含的break语句。
如果for循环未被break终止,则执行else块中的语句。
# 求 50 - 100 之间的质数 import math for i in range(50, 100 + 1): for j in range(2, int(math.sqrt(i)) + 1): if i % j == 0: break else: print(i) """ 53 59 61 67 71 73 79 83 89 97 """