Python介绍
python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。
Python应用领域
- 云计算:openstack
- web开发:众多优秀的WEB框架,众多大型网站均为Python开发,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
- 人工智能、科学计算:典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas
- 系统运维
- 金融分析:量化交易,金融分析,在金融工程领域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测
- 图形GUI:PyQT, WxPython,TkInter
Python是什么编程语言
编译型和解释型
编译型:将整个源代码文件翻译成机器代码文件
解释性:从源代码中读取一条语句,将他翻译成机器代码或者虚拟机代码,然后立即执行
Python编译器介绍
- CPython : 解释成C语言机器码
- JPython : 解释成Java语言字节码
- Ironpython : 解释成C#语言字节码
- Pypy : 解释成JIT即时编译
Python2和3区别
- 通用性和实用性角度考虑-->python2 : 采用的是ASCII 、 语言有陋习,代码重复,冗余。
- 处理编码问题和协程编程->python3 : 采用的是UTF-8编码、简单清晰优美。
第一个Python程序
- 新建一个HelloWorld.py
- 在里面键入 print('Hello World')
- cmd -> 切到 py所在的目录 -> python HelloWorld.py 即可运行
Python编码配置
什么是编码?
计算机在存储、运算、传输过程中,传输的是10011010,这样的二进制文件(计算机中,高低电平表示1和0),像a、b、c这样的英文字母,还有@#¥%这样的特殊符号,怎么在计算机中使用0101001011010来表示呢?
每个人都可以约定自己的一套规则,即编码
而大家想要互相通信而不混乱的话,那么大家需要使用相同的编码规则于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。
ASCII码
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多使用8为来表示1个字符,最多能表示2**8=256个字符。现今最通用的单字节编码系统。
Unicode码
Unicode码扩展至AscII字元集,为了能表示所有的汉字,Unicode采用了4个字节(32位)来编码字符。在传输、存储中,比AscII占用大一倍的资源,造成资源浪费;而对于AscII来说,高字节的0对它毫无用处,为了解决这个问题,就出现了中间格式的字符集,他们被称为通用转换格式,及UTF,常见的有UTF-8,UTF-16,UTF-32。
UTF-8
UTF-8是一种针对Unicode可变长度的字符编码,又称为万国码。
英文: 8位,1个字节来表示
欧洲文字: 16位,2个字节来表示
亚洲文字: 32位,4个字节来表示
Python中的编码问题:
print "你好,世界" #在Python2.7中,print不用加括号,Python3不可以
#!
行的后面再增加一行特殊的注释来定义源文件的编码:# -*- coding: encoding -*-
通过此声明,源文件中所有的东西都会被当做用 encoding 指代的 UTF-8 编码对待。
Python开胃菜-用户交互
name = input("请输入您的姓名:") age = input("请输入您的年龄:") hobby = input("请输入您的爱好:") print("我叫" + name + "今年:" + age + "岁" + "爱好:" + hobby) # input() 会把 输入的内容转换成 str类型
Python变量
变量是什么?
变量:程序在运行期间把中间结果临时存到内存中,以便后续使用
#声明变量 变量名 = 变量值 name = 'windows' version = '10' print(name + version)
变量的命名规则
- 只能是数组、字母、下划线的组合
- 不能以数字开头
- 不能是Python的关键词
- 最好使用英文,不要使用中文
- 变量名最好有意义,可描述性
- 变量名不要太长
- 推荐下划线格式编写
变量的书写习惯
- 驼峰体 : toString、 NumberOfStudent等,每个单词的首字母大写
- 下划线: number_of_student 、 to_string ,每个单词用下划线隔开
Python常量
常量:就是固定不变的量,比如圆周率、建国日期等,在Python中,约定俗成 变量名所有字母全大写代表一个常量
Python注释
#单行注释 ''' 多行注释 '''被注释的内容''' 或者 """被注释的内容""" name = input("请输入您的姓名:") age = input("请输入您的年龄:") hobby = input("请输入您的爱好:") print("我叫" + name + "今年:" + age + "岁" + "爱好:" + hobby) '''
Python基础数据类型
什么是数据类型:一个值的集合以及定义在这个值集上的一组操作。它决定了如何将代表这些值的位存储到计算机内存中,决定变量能够存储那些数据。
整形(int)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(长整型)
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
str(string字符类型)
加了引号的字符都被认为是字符串! 'string' 或 "string" 单引号和双引号没有区别
name = "zhangsan" #双引号 sex = 'male' #单引号 info = ''' My name is Zhangsan , i an 22 years old. ''' #三个引号""" """ age = " #只要加引号就是字符串
多引号的作用: 多行文本的时候,比如一首诗
msg = ''' 今天我想写首小诗, 歌颂我的同桌, 你看他那乌黑的短发, 好像一只炸毛鸡。 ''' print(msg)
字符串的拼接
字符串只能+、*;不能 - 、/
字符串 " +" 运算
name = input("请输入您的姓名:") age = input("请输入您的年龄:") job = input("请输入您的工作:") hobby = input("请输入您的爱好:") print("我叫:" + name + ",今年" + age + "岁" + ",我的工作是" + job + ",爱好" + hobby)
字符串 " * " 运算; 字符串乘只能和数字相乘,不能和其他类型相乘
>>> name = input('请输入您的姓名:') 请输入您的姓名:Zhang San >>> print(name * 10) Zhang San Zhang San Zhang San Zhang San Zhang San Zhang San Zhang San Zhang San Zhang San Zhang San
布尔值(True、False)
布尔值(,只包含两个值,一个表示真(True)、一个表示假(False)
我现在有2个值 , a=3, b=5 , 我说a>b你说成立么? 我们当然知道不成立,但问题是计算机怎么去描述这成不成立呢?或者说a< b是成立,计算机怎么描述这是成立呢?没错,答案就是布尔类型
>>> a = 3 >>> b = 5 >>> a > b False #3 > 5 不成立就是False,即假 >>> a < b True #3 < 5 成立就是True,即真 >>>
格式化输出
现有一练习需求,问用户的姓名、年龄、工作、爱好 ,然后打印成以下格式
------------ info of Zhang San ----------- Name : Zhang San Age : 22 job : Teacher Hobby: girl ----------------- end --------------------
你怎么实现呢?你会发现,用字符拼接的方式还难实现这种格式的输出,所以一起来get一下新姿势
只需要把要打印的格式先准备好, 由于里面的 一些信息是需要用户输入的,你没办法预设知道,因此可以先放置个占位符,再把字符串里的占位符与外部的变量做个映射关系就好啦
name = input("请输入您的姓名:") age = input("请输入您的年龄:") job = input("请输入您的工作:") hobby = input("请输入您的爱好:") print("我叫:" + name + ",今年" + age + "岁" + ",我的工作是" + job + ",爱好" + hobby) print("------------ info of %s -----------" %(name)) print("Name : %s\n Age : %s\n Job : %s\n Hobby:%s " %(name,age,job,hobby)) print("--------------- end ---------------")
第一种方式
name = input("请输入您的姓名:") age = input("请输入您的年龄:") job = input("请输入您的工作:") hobby = input("请输入您的爱好:") info = ''' --------------- info of %s --------------- # %s : %代表占位符,s代表str字符串。代表括号中第一个参数的位置 Name : %s #代表name Age : %s #代表age job : %s #代表job Hobby: %s #代表hobby ----------------- end -------------------- ''' print(info)
第二种方式
name = input("请输入您的姓名:") age = input("请输入您的年龄:") job = input("请输入您的工作:") hobby = input("请输入您的爱好:") dic = {"name" : name,"age" : age,"job":job,"hobby":hobby} # %s : %代表占位符,s代表str字符串。代表括号中第一个参数的位置 #代表name #代表age #代表job #代表hobby info = ''' --------------- info of %(name)s --------------- Name : %(name)s Age : %(age)s job : %(job)s Hobby: %(hobby)s ----------------- end -------------------- ''' %(dic) print(info)
第三种方式-字典的形式
%s代表的是字符串的占位符,除此之外还有%d代表的是数字占位符。如果我们把上面代码中age的占位符换成%d,将会报错
Traceback (most recent call last): File "D:/python/Format.py", line 20, in <module> ''' %(dic) TypeError: %d format: a number is required, not str
说明%d需要一个数字,但是input()传入的是字符串,%d format : a number is required, not str。
type()函数可以帮我们查看输入的是什么类型
print(type(age)) >>><class 'str'>
input()函数接受的所有函数都是str类型的字符串格式。 要想程序不出错,需要使用到int()方法:
age = int(input('请输入您的年龄')) #int()方法,把str转换成数字 print(type(age)) >>><class 'int'>
问题:现在有这么行代码
msg = "我是%s,年龄%d,目前学习进度为80%"%('金鑫',18) print(msg)
运行,程序报错
Traceback (most recent call last): File "D:/python/Format.py", line 1, in <module> msg = "我是%s,年龄%d,目前学习进度为80%"%('Zhang San',18) ValueError: incomplete format
编译器会把80后面的%当作占位符,但是我想在上面一条语句中最后的80%就是表示80%而不是占位符,怎么办?
msg = "我是%s,年龄%d,目前学习进度为80%%"%('Zhang San',18) print(msg)
我们使用两个%,第一个%是对第二个%转义,告诉编译器这只是单纯的%,不是占位符。
基本运算符
运算符
计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,今天我们暂只学习算数运算、比较运算、逻辑运算、赋值运算
算数运算
以下假设变量:a=10,b=20
比较运算
以下假设变量:a=10,b=20
赋值运算
以下假设变量:a=10,b=20
逻辑运算
针对逻辑运算的进一步研究:
1,在没有()的情况下not 优先级高于 and,and优先级高于or,即优先级关系为( )>not>and>or,同一优先级从左往右计算。
例:
1 1,3>4 or 4<3 and 1==1 False 2 2,1 < 2 and 3 < 4 or 1>2 True 3 3,2 > 1 and 3 < 4 or 4 > 5 and 2 < 1 True 4 4,1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8 False 5 5,1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 False 6 6,not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 False
逻辑运算符-练习
2.逻辑判断 两边位数字的时候
x or y , x为真,值就是x,x为假,值是y;
x and y, x为真,值是y,x为假,值是x。
例:
8 or 4 8 0 and 3 0 0 or 4 and 3 or 7 or 9 and 6 3
in , not in
判断某个元素是否在(字符串、元组、列表、集合)中
实际应用场景 : 判断用户输入是否包含非法词汇
in
inp = input("请输入您的评论:") ill = '非法词汇' if ill in inp : print("您输入的含有非法字符,请重新输入!") else : print("评论成功!")
not in
1 inp = input("请输入您的评论:") 2 ill = '非法词汇' 3 if ill not in inp : 4 print("评论成功!") 5 else : 6 print("您输入的含有非法字符,请重新输入!")
not in
判断语句(if)
假如把写程序比做走路,那我们到现在为止,一直走的都是直路,还没遇到过分叉口,想象现实中,你遇到了分叉口,然后你决定往哪拐必然是有所动机的。你要判断那条岔路是你真正要走的路,如果我们想让程序也能处理这样的判断怎么办? 很简单,只需要在程序里预设一些条件判断语句,满足哪个条件,就走哪条岔路。这个过程就叫流程控制。
单分支
if 条件: 满足条件后要执行的代码
双分支
if 条件: 满足条件执行的代码 else: if条件不满足走这段
score = 70 if score >= 60: print("及格") else: print("不及格")
多分枝
if 条件: 满足条件执行的代码 elif 条件: 上面条件不满足就走这段 elif 条件: 上面条件不满足就走这段 elif 条件: 上面条件不满足就走这段 else : 上面所有条件都不满足就走这段
1 age = 48 2 3 guess = int(input("请输入您要猜的年龄:")) 4 if guess > age: 5 print("猜大了,往小里试试...") 6 7 elif guess < age: 8 print("猜小了,往大里试试...") 9 else : print("恭喜你,猜对了")
if多分枝结构
匹配成绩的小程序
成绩有ABCDE5个等级,与分数的对应关系如下
A 90-100 B 80-89 C 60-79 D 40-59 E 0-39
1 score = int(input("请输入分数:")) 2 if score > 100: 3 print("输入有误") 4 elif score >= 90: 5 print("A") 6 elif score >=80: 7 print("B") 8 elif score >= 60: 9 print("C") 10 elif score >= 40: 11 print("D") 12 else: 13 print("E")
if多分枝-程序
循环语句-while
- 一般情况下,需要多次重复执行的代码,都可以用循环的方式来完成
循环终止条件:
- break关键字
- 改变while循环条件
.... while 条件: 条件满足时,做的事情1 条件满足时,做的事情2 条件满足时,做的事情3 条件不满足,跳出循环,执行while下面的代码 ....
python中变量自增有i = i + 1 或者 i+=1 ;但是没有 i++
i = 1 while i < 10: print(i) i = i + 1 #i+=1可以;python中没有 i++
while循环流程图
continue关键字
比如打印1-10,唯独不打印7, 1,2,3,4,5,6,8,9 ,10,即可使用continue,在变量等于7的时候,跳出本次循环,执行下次循环
i = 1 while i <= 10: if i==7 : i+=1 continue print(i) i+=1
break关键字
i = 1 while i <= 10: if i==7 : break print(i) i+=1
只执行到7,中断循环,后面的数组不再打印输出。
while....else
与其它语言else 一般只与if 搭配不同,在Python 中还有个while ...else 语句。
while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句。
1 count = 1 2 while count < 7: 3 print(count) 4 count += 1; 5 else: 6 print("程序正常终止!") 输出: Loop 1 Loop 2 Loop 3 Loop 4 Loop 5 Loop 6 循环正常执行完啦 -----out of while loop ------
while....else...
含有break的情况
1 count = 0 2 while count < 7: 3 4 count += 1; 5 if(count == 5): 6 break 7 print(count) 8 else: 9 print("程序正常终止!") 输出: 1 2 3 4
while...else... 含有break
相关练习题
1、使用while循环输入 1 2 3 4 5 6 8 9 10
x = 0 while x < 11: if x==7 : x = x + 1 continue print(x) x = x + 1
循环输出1-10,排除7
x = 0 while x <= 10: # x < 11 或 x <= 10 if x==7 : x = x + 1 continue print(x) x = x + 1
循环输出1-10,排除7 .(2)
2、求1-100的所有数的和
sum = 0; count = 1; while count < 101: sum = sum + count count = count + 1 print(sum)
1-100和
3、输出 1-100 内的所有奇数
x = 1 while x < 101: if x % 2 == 1 : print(x) x = x + 1
1-100所有奇数
4、输出 1-100 内的所有偶数
x = 1 while x < 101: if x % 2 == 0: print (x) x = x + 1
1-100所有的偶数
5、求1-2+3-4+5 ... 99的所有数的和
sum = 0 x = 1 y = 0 while x < 100: if x % 2 ==0: y -=x else: y+=x x = x + 1 print(y)
第一种方法
n=1 x = 0 #代表偶数 y = 0 #代表奇数 sum = 0 #代表和 while n<100: if n%2 == 1: x = x + nb elif n%2 == 0: y = y + nb n=n+1 sum = x - y; print(sum)
第二种方法
x = 1 y = 98 sum = 0 while x < 99 and y > 2: x = x + 2 y = y - 1 sum = x - y print(sum)
第三种方法
x = 1 y = 98 sum = 0 while x < 99 and y > 2: x = x + 2 y = y - 1 sum = x - y print(sum)
第四种方式
6、用户登陆(三次机会重试)
username = 'root' passwd = 'admin' i = 0 count = 0 while True: name = input('请输入登陆用户名:') password = input('请输入登陆密码:') if username == name and password == passwd : print('登陆成功!欢迎:' + username ) break else: i = i + 1 if i != 3: print(i) print("还剩",3 - i,"次机会") if i == 3: print('\n登录失败次数过多,请稍后再试!') break
用户登陆(三次机会重试)
7、判断下列逻辑语句的True,False.
1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 True 1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 False
8、求出下列逻辑语句的值。
8 or 3 and 4 or 2 and 0 or 9 and 7 答案:8 0 or 2 and 3 and 4 or 6 and 0 or 3 答案:4
9、下列结果是什么?
1. 6 2. 3 3. 0 or 5 < 4 # False 4. 5 < 4 5. 2 > 1 or 6 # True 6. 3 and 2 > 1 # True 7. 0 8. 2 > 1 9. 3 > 1 10.3 > 1
第9题计算每个表达式的结果
10、 简述变量命名规范
1.变量名只能由数字、字母、下划线组成 2.变量名不能以数字开头 3.变量名不能和Python关键字重名 4.变量名尽量有意义,可描述性 5.变量名尽量不要使用中文定义 6.推荐使用下划线格式 例:old_boy 7.变量名不要太长
变量名规范
11、name = input(“>>>”) name变量是什么数据类型?
str 字符串类型
12、if条件语句的基本结构?
1.单分支 if 条件: 表达式 2.双分支 if 条件: 表达式 elif 条件: 表达式 if 条件 : 表达式 else: 表达式 3.多分枝 if 条件: 表达式 elif 条件: 表达式 elif 条件: 表达式 else: 表达式 4.if嵌套 if 条件: 表达式 if 条件: 表达式
if基本结构
13、while循环语句基本结构?
1.while while 条件: 表达式 2. while...else... while 条件: 表达式 else: 表达式
while基本结构
14、写代码:计算 1 - 2 + 3 ... + 99 中除了88以外所有数的总和?
sum = 0 count = 1 while count < 100 : if count % 2 == 1: sum += count else: if count == 88: count += 1 continue sum -= count count += 1 print(sum)
1-2+3-4+...+99 除88以外的和
15、⽤户登陆(三次输错机会)且每次输错误时显示剩余错误次数(提示:使⽤字符串格式化)
username = 'root' passwd = 'admin' i = 0 count = 0 while True: name = input('请输入登陆用户名:') password = input('请输入登陆密码:') if username == name and password == passwd : print('登陆成功!欢迎:' + username ) break else: i = i + 1 if i != 3: print(i) print("还剩",%d,"次机会"%(3 - i)) if i == 3: print('\n登录失败次数过多,请稍后再试!') break
三次机会,请珍惜
16、 简述ascii、unicode、utf-8编码关系?
AscII : 使用1个字节(8位)表示;范围只包括英文和常用符号 Unicode : 使用16/32位来表示;扩展AscII,包括全球多种字符和符号 UTF-8 : 可伸缩的Unicode,英文8位,欧洲文字16位(2字节),亚洲文字24位
17、 简述位和字节的关系?
计算机内部使用0101,来表示、存储、传输我们日常使用的数据。为了大家相互通信不混乱,规定每8位表示为一个字符(AscII)或者每16/32位的Unicode,和可伸缩的UTF-8,所以: 位 : 是计算机内部数据储存的最小单位,字节是计算机中数据处理的基本单位。计算机中以字节为单位存储和解释信息,规定一个字节由八个二进制位构成,即1个字节等于8个比特(1Byte=8bit)。 八位二进制数最小为00000000,最大为11111111;通常1个字节可以存入一个ASCII码,2个字节可以存放一个汉字国标码。
18、“⽼男孩”使⽤UTF-8编码占⽤⼏个字节?使⽤GBK编码占⼏个字节?
“老男孩”使用UTF-8占用:9个字节(3个字节一个汉字) 使用GBK占用:6个字节。(国标是2个字节一个汉字)
19、制作趣味模板程序需求:等待⽤户输⼊名字、地点、爱好,根据⽤户的名字和爱好进⾏任意现实 如:敬爱可亲的xxx,最喜欢在xxx地⽅⼲xxx
name = input("请输入您的姓名:") place = input("请输入您喜欢去的地方:") hobby = input("请输入您的爱好:") print("敬爱可亲的%s,最喜欢在%s地干%s" %(name,place,hobby))
20、等待⽤户输⼊内容,检测⽤户输⼊内容中是否包含敏感字符?如果存在敏感字符提示“存在敏感字符请重新输⼊”,并允许⽤户重新输⼊并打印。敏感字符:“⼩粉嫩”、“⼤铁锤”
min1 = '小粉嫩' min2 = '大铁锤' while True: content = input("请输入内容:") if min1 in content or min2 in content: print("存在敏感字符请重新输⼊") else: print(content) break
21、单⾏注释以及多⾏注释?
# 代表注释一行 ''' 被注释的内容 一对3个单引号组成多行注释 ''' """ 被注释的内容 一对3个双引号组成多行注释 """
单号注释和多行注释
22、简述你所知道的Python3和Python2的区别?
Python2和Python3的区别: 1. Python2 包含了很多C、PHP、Java程序员的陋习 2.Python2 包含了很多重复代码,冗余。 3. Python的默认编码是ASCII,Python3默认是UTF-8编码 4. Python3代码简洁明了 5. 内置函数不同,比如Python2的raw_intput(),在Python3中input() 6. Python规范更严谨。Python2中print ”Hello“ ,在Python3中print()需要使用括号
Python 2和3的区别
23、看代码书写结果:
a = 1>2 or 4<7 and 8 == 8 print(a) True
表达式运行结果
24、continue和break区别?
break : 直接跳出循环 continue : 跳出当前循环,继续下次循环
break和continue区别
25、Bit,Bytes,Kb,Mb,Gb,Tb之间的转换关系。
8 bit = 1Bytes 1024 Bytes = 1KB 1024KB = 1MB 1024MB = 1GB 1024GB = 1TB
单位换算
26、Unicode,utf-8,gbk,每个编码英文,中文,分别用几个字节表示。
编码 |
中文 |
英文 |
Unicode |
4个字节 |
4个字节 |
UTF-8 |
3个字节 |
1个字节 |
GBK |
2个字节 |
2个字节 |