一、Python的简介
1、Python的由来与版本
1.1 python的由来
python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。
1.2 python版本
目前Python的主要版本为Python2.7与Python3.6 。
Python2版本到2020年就不再维护。
2、Python是什么样的语言
编程语言主要从以下几个角度为进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言。
2.1 编译型语言和解释型语言
编译型语言:当用户写完一段代码需要执行的时候,由编译器先把整段代码一次性编译成计算机能看懂的二进制文件,然后再执行。这个过程中,如果用户写的代码出错了,编译器就得整段从头开始编译,只是几行或者几页代码的情况下还感觉不出来,但是如果代码由成千上万行甚至上亿行,可想而知,会浪费很多时间,导致开发速度慢。而且,他不是跨平台的,编译过后的代码在不同操作系统上就无法执行。他的优点是运行快,因为一旦编译成功,每次调用只需直接执行即可
编译型语言的代表:C语言、C++语言
解释型语言:当用户写完一段代码需要执行的时候,由解释器一段一段的解释成计算机能看懂的二进制文件,然后直接执行。与编译型语言不同的是,如果用户写的代码出错了,解释器不需要从头开始,这就会大大节省了开发时间。而且他是可以移植的,不同操作系统由不同的解释器可以解释他。他的缺点是执行速度慢,每次执行都需要一行一行的解释。
解释型语言的代表:JavaScript、PHP、Python
2.2 动态语言与静态语言
动态语言:动态语言是指在运行的时候才去检查一个变量的数据类型,写程序的时候不需要先给一个变量指定类型。当第一次给变量赋值的时候,该语言会将该变量的数据类型存到内存当中。Python和Ruby就是典型的动态语言的代表。
静态语言:静态语言是指程序在编译的时候就要首先检查每个变量的数据类型,所以用户在写程序之前就要首先声明每个变量的数据类型。Java、C、C++都是静态语言的代表。
2.3 强类型定义语言和弱类型定义语言
强类型定义语言:一旦一个变量被赋值为一个数据类型,那么它将永远为该数据类型,除非它被强制转换(int()、str())。比如说 a = 1 那么之后在给 a 赋值的时候也必须为整形。
弱类型定义语言:一个变量可以在不同的时候被赋予不同数据类型的值。所以,一个变量的数据类型可以被忽略。
综上所述,Python是一种动态解释型的强类型定义语言。
3、Python的优缺点
优点:
▷ 优雅、明确、简洁
▷ 可移植、可拓展、可潜入
▷ 开发效率高
缺点:
▷ 运行速度慢
▷ 代码不能加密
▷ 不能多线程
4、Python的种类
CPython
当我们从Python官方网站下载并安装好Python 3.6后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python
就是启动CPython解释器。
CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。
IPython
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调 用了IE。
CPython用>>>
作为提示符,而IPython用In [
序号
]:
作为提示符。
PyPy
PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。
绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。
Jython
Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
IronPython
IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
小结:
Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。
二、Python的环境配置
1、下载安装包 https://www.python.org/downloads/ 2、安装 默认安装路径:C:\python27 3、配置环境变量 【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】 如:原来的值;C:\python27,切记前面要有英文输入法状态下的分号
4、可能需要的网址
http://www.jianshu.com/p/042324342bf4 PyCharm 安装教程
http://idea.lanyus.com/ PyCharm 激活码
https://www.7down.com/soft/4338.html PyCarm 汉化方法
三、Python基础
1、编写以及运行Python代码的方法
▷ 创建一个文件名为Hello_world.py的文件,编写代码如下:
print("Hello World!") #第一个程序一定要是Hello World! 因为它会给你带来好运!!!!
▷ 按快捷键win+R打开运行窗口,然后输入cmd打开命令行窗口。
▷在命令行窗口里输入 python e:/test.py(文件路径)
上图可以看出,以及成功运行该文件代码并且打印出“Hello World!”
2、内容编码
解释器在执行代码的时候,需要将代码编译成机器能读懂的二进制码(由1和0组成),而python2版本在编译的时候默认以ASCII码的格式进行转换(也可以指定编码格式),而python3版本在编译的时候默认为utf-8格式进行转换。
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。
然而,世界上的语言以及符号远远不止256个,所以当计算机传入世界各国的时候ASCII码已经不能满足大家的使用了,于是出现了Unicode(统一码、万国码、单一码),Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多
但是问题来了,友谊Unicode至少2个字节,也就是16位,但是英文字母以及有些符号根本不需要这么多字节,所以统一用Unicode码的话会大大浪费宝贵的内存空间,于是又出现了一种新的编码:UTF-8.该编码格式是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:
报错:ascii码无法表示中文
解决方法是,在代码的首行加入以下代码,用来指定编码格式:
#_*_ coding:utf -8 _*_ print('你好 世界!')
#这样,就能成功执行并打印出中文了。
3、注释
单行注释:# 被注释内容
多行注释:'''被注释内容''',或者"""被注释内容"""
4、变量
变量就是把程序运行的中间结果,存到内存中,以待调用
▷声明变量
1 # -*- coding: utf-8 -*- 2 3 name = "Python"
上述代码声明了一个变量,变量名为: name,变量name的值为:"Python"
变量的作用:昵称,其代指内存里某个地址中保存的内容
▷变量的命名规则
1、由字母、下划线、数字组成
2、首字母不能是数字
3、不能是python中的关键字(以下为python关键字)
['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']
▷变量的赋值
变量的赋值其实是在内存中开辟一块数据,然后将该数据指向变量名,这样在调用变量名的时候就能找到该变量所对应的值。
而如果将一个变量的值赋予给另一个变量,那么内存中还是只有一个数据值,只是将该数据指向了不同的两个变量而已
5、常量
常量即指不变的量,如pai 3.141592653..., 或在程序运行过程中不会改变的量
在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量(实际上这个常量也是可以改变值的)
:Bir_of_China = 1949
6、用户交互(input)
1 # -*- coding: utf-8 -*- 2 3 name = input("请输入姓名:") # 将用户输入的内容赋值给 name 变量 4 age=input('请输入年龄:') # 将用户输入的内容赋值给 age 变量 5 6 print(name,age) # 打印输入的内容 7 8 #执行脚本就会发现,程序会等待你输入姓名后再往下继续走。
7、基础数据类型
▷ int 整形
在32位的机器上,int的长度为32为,范围为 -2**31 -- 2**31-1
在64位的机器上,int的长度为64位,范围为 -2**63 -- 2**63-1
▷ long 长整型 (python3版本已经没有该类型了,不管多长的数,全部为int类型)
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
该类型不用用户特别定义,当一个数字大到超过int数据类型的范围后将自动转化为long长整形。
注意:python3版本没有long型了,全部为int类型
▷ bool 布尔类型(True False)
True :1 、 1==1 、 2>1 、type('a') == str 的结果均为True
False:0 、 1!=1 、 2>3 等等的结果均为False
▷ str 字符串类型
简单一句话,在python中,加了引号的字符都被认为是字符串,哪怕他是一个数字(‘123’)
hometown = 'USA' #单引号也可以 name = "X" #双引号 age = "22" #只要加引号就是字符串 age2 = 22 #int 整型 msg = '''My name is X, I am 22 years old!''' #3个引号一般表示大段落赋值
单引号双引号以及三引号都可以表示字符串
双引号和单引号可以搭配使用,如下:
print("\"I'm\"") #单引号及双引号打印!
三引号可以将一大段代码赋值给一个变量,如下:
1 msg = ''' 2 [山坡羊]十不足 3 (明)朱 载 土育 4 逐日奔忙只为饥,才得有食又思衣。 5 置下绫罗身上穿,抬头却嫌房屋低。 6 盖了高楼并大厦,床前缺少美貌妻。 7 娇妻美妾都娶下,又虑出门没马骑。 8 将钱买下高头马,马前马后少跟随。 9 家人招下十数个,有钱没势被人欺。 10 一铨铨到知县位,又说官小职位卑。 11 一攀攀到阁老位,每日思想要登基。 12 一朝南面做天下,又想神仙下象棋。 13 洞宾陪他把棋下,又问哪是上天梯? 14 上天梯子未做下,阎王发牌鬼来催。 15 若非此人大限到,升到天上还嫌低。 16 ''' 17 print(msg)
字符串可以用 + 拼接,但是两者必须都为字符串类型。如:
1 a='hello' 2 b='friend' 3 c=a+b 4 print(c)
打印结果为‘hellofriend’
字符串也可以与一个数字相乘,结果是将该字符串连续输入N遍,如:
1 print('xyz' * 3) 2 3 #输出结果为‘xyzxyzxyz’
现有练习需求,问用户的姓名、年龄、工作、薪酬 ,然后打印成以下格式:
1 #-*- coding:utf-8 -*- 2 name=input('请输入你的姓名:') 3 age=int(input('请输入你的年龄:')) 4 print(type(age),type(str(age))) #查看age类型,转换类型 5 job=input('请输入你的工作:') 6 wage=input('请输入你的薪酬:') 7 info=''' 8 -----info of %s----- #给一个占位符,等待传入name的值 9 name=%s #给一个占位符,等待传入name的值 10 age=%d #给一个占位符,等待传入age的值(且必须是整形) 11 job=%s #给一个占位符,等待传入job的值 12 wage=%s #给一个占位符,等待传入wage的值 13 '''% (name,name,age,job,wage) 14 print(info)
注意:如果字符串里需要出现‘%’的时候,需要用转义符号“%”来实现,如:
1 msg = "我是%s,年龄%d,目前学习进度为80%%"%('金鑫',18) 2 print(msg)
PS :
▷查看数据类型的方法为type() 如type(1) 的结果为int type('a')的结果为str
▷如果一个变量位阿拉伯数字,则该数据可以在int类型与str类型之间互相转换
9.基本运算符
▷算数运算
▷比较运算
▷赋值运算
▷逻辑运算
注意:在没有()的情况下,not的优先级大于and,and的优先级大于or。即 () > not > and > or 优先级相同的情况下从左向右计算
10、流程控制之判断
在现实中,我们往往由很多种选择,比如说走路遇到分叉口,我们只能选择走一条路,程序也是一样,如果遇到分支,就用if语句控制流程
1 if 条件判断: #条件判断可以是比较运算,逻辑运算,以及布尔运算 2 执行语句 3 else: 4 执行语句 5 6 #注意:if 以及else 后都由一个分号 ':' 7 # if 以及else 下面的一段执行语句必须缩进
1 user_name=input('请输入用户名:') 2 password=input('请输入密码:') 3 if user_name == "zhatm" and password=="123123": 4 print('登录成功!') 5 else: 6 print("用户名或密码不正确") 7 8 #if语句可以嵌套使用 9 10 user_name=input('请输入用户名:') 11 password=input('请输入密码:') 12 if user_name == "zhatm" : 13 if password=="123123": 14 print('登录成功!') 15 else: 16 print("用户名或密码不正确")
if else也可以由多个分支判断,用elif表示,如:
1 num = int(input('请输入一个数字:')) #int 转换为整型 2 3 if num == 1: 4 5 print("您选择的是1号") 6 7 elif num == 2: 8 9 print("您选择的是2号") 10 11 elif num == 3: 12 13 print('您选择的是3号') 14 15 else: 16 print('输入有误,请在1、2、3中选择')
11、流程控制之循环
在写程序的过程中,有时候我们需要一段代码反复执行许多次,如果每次都重复写很多次,代码不但会占用很多篇幅,而且会变得非常不美观,这不符合python的‘优雅、明确、简洁’的宗旨,这个时候我们只需要用一个循环语句即可解决问题。格式为:
while 判断条件: #与判断语句if一样,判断条件可以是比较运算,逻辑运算,以及布尔运算
循环体
我们通过判断条件控制循环的次数,如
1 n = 0 2 while n < 3 : 3 print("这段话将被执行3次") 4 n = n+1
我们可以通过关键字break 、continue来终止循环
break是跳出整个循环,直接执行循环体外面的代码
continue是跳出本次循环,重新返回循环的开头
1 count = 0 2 while True: 3 print("如果不是if.....break,我就会一直打印下去,直到你的电脑爆炸为止") 4 if count == 5: 5 break 6 count = count + 1
上面的例子可以看到,只要出现break,不管判断条件是否依然为True,循环都要立即终止
1 n = 0 2 while n < 10: 3 n = n + 1 4 if n == 4: 5 continue 6 print(n, "就是不愿意打印'4'")
上面的例子可以看出,出现了continue,就会跳出本次循环,但是还会跳到循环体的第一句,来判断条件是否为True
其他的语言中的else一般只与if搭配,而python中,else还可以搭配while,格式为:
while 条件判断: 循环体 else: 如果循环正常执行完毕,没有被break终止,则会执行本段代码
四、练习
1 # -*- coding:utf-8 -*- 2 # 输入0,1,2,3,4,5,6,8,9,10 3 num=0 4 while num <10: 5 num+=1 6 if num == 7: 7 continue 8 print(num) 9 # 0--100求和 10 num=0 11 x=0 12 while num <100: 13 num+=1 14 x=x+num 15 if num ==100: 16 print(x) 17 #0--100内所有的奇数 18 for number in range(1,100,2): 19 uneven=number 20 print(uneven) 21 number=0 22 while number <100: 23 number+=1 24 if number % 2 ==1: 25 print(number) 26 # 0-100内所有的偶数 27 num=[] #定义空列表 28 for number in range(2,101,2): 29 num.append(number) #number数值附加给列表num 30 print(num) 31 32 number=0 33 while number <100: 34 number+=1 35 if number %2 == 0: 36 print(number) 37 # 求1-2+3-4+5 ... 99的所有数的和 38 number = 0 39 sum=0 40 while number < 99: 41 number+=1 42 if number % 2 ==0: #如果是偶数的话,运算符号即为- 43 sum=sum-number 44 else: 45 sum=sum+number #如果是奇数的话,运算符号即为+ 46 print(sum) 47 #用户登陆(三次机会重试) 48 count=0 49 while True: 50 user_name=input('请输入用户名:') 51 password=input('请输入密码:') 52 if user_name == "zhatm" and password=="123123": 53 print('登录成功!') 54 break 55 else: 56 print('用户名或密码错误!.....请重新输入') 57 count+=1 58 if count == 3: 59 print('登录有误次所过多,终止登录') 60 break