一、编程与编程语言
python是一门编程语言,学习python之前,先搞明白三个问题。编程的目的?什么是编程语言?什么是编程?
1、编程目的?
计算机的发展就是为解放人力,机器是死的,所以人必须找到一种能够被机器识别的表达式从而把自己的思想按照这个表达方式传递机器,完成机器可以自发的工作。
2、什么编程语言?
上面所说的表达方式指的就编程语言,那我们学习英语来几个栗子:学习英语需要学习单词、语法,最后要将单词按照语法格式写成作文;同样的道理,学习python也是学习关键字(if while for and or)、语法,最后达到编程的目的;
3、什么编程?
按照某种编程语言的语法风格写程序,程序在未执前就是一对普通文件。
二、编程语言的发展及分类
在这里将程序员比作奴隶主,将计算机比作奴隶
第一阶段:机器语言(即站在奴隶角度说计算机能听懂的话,直接用二进制编程,直接操作硬件)
优点:执行效率快
缺点:学习难度大,开发效率低
第二阶段:汇编语言(站在奴隶角度说计算机能听懂的话,用一些英文标签来代替一串特定的意义的二进制,还是直接操作硬件)
优点:执行效率快,不如机器语言快
缺点:学习难度大,开发效率低,比机器语言降一个难度
第三阶段:高级语言(站在奴隶主的角度说人话,机器无法理解,所以需要翻译,翻译有分为两类:编译和解析)
编译型(C):相当于百度翻译,翻译一次,拿着该翻译的结果去执行。
优点:执行效率高
缺点:开发效率低
解释型(Python):相当于同声传译,一边解释一边执行。
优点:开发效率高
缺点:执行效率低
以上三个阶段的 执行效率、开发效率、学习难度依次排序如下:
执行效率:从高到低(机器语言>汇编语言>高级语言)
开发效率:从低到高(机器语言<汇编语言<高级语言)
学习难度:从难到易(机器语言>汇编语言>高级语言)
PS:执行效率不是影响,开发效率才是王道
三、写程序的两种方式
1、交互式:(在python解释器中直接执行的命令)即时调试
2、非交互式:(执行文件)python3 C:\test.py
四、变量
1、什么是变量?
变指的是“变化”,量指的反映某种状态
2、为什么要有变量?
程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说是保存下来程序执行时状态以及状态的变化。
3、如何定义变量?
在程序的内存空间为变量开一个小房间,挂上变量名(相当于门牌号,指向值所在的空间)
语法:变量名=变量值
name='test'
password='test123'
4、变量名的命名规则?
1)变量名只能是 字母、数字或下划线的任意组合
2)变量名的第一个字符不能是数字
3)关键字不能声明为变量名[
5、定义的方式?
1)驼峰式
TestValue=20(大小写结合)
2)下划线
Test_Value=20
PS:1)不好的定义变量名方式
(1)变量名为中文、拼音
(2)变量名过长
(3)变量名词不达意
2)定义变量会有:id,type,value
(1)等号比较的是value值
(2) is比较的是id号(id号不是内存地址 但是反映了在内存中的位置)
强调:
1. id相同,意味着type和value必定相同
2. value相同type肯定相同,但id可能不同,如下
>>> x='Info Egon:18'
>>> y='Info Egon:18'
>>> x == y
True
>>> x is y
False
>>> id(x)
4376607152
>>> id(y)
4376607408
6、变量的修改与内存管理(引用计数与垃圾回收机制)
python中对于没有引用的内存数据有自动回收机制,判断是否有引用的方法是看变量所在的内存空间是否挂有变量名。
五、常量
常量即指不变的量,如圆周率π 3.141592653...,在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量
TEST_VALUE = 56
#ps:在c语言中有专门的常量定义语法,const int count = 60;一旦定义为常量,更改即会报错
六、Python程序被执行的过程(重点!!!)
举栗子:在Windows的python3环境下启动一个C:\test.py文件,具体过程如下
1、先启动python3.exe
2、把C:\test.py从硬盘读入内存
3、解释执行文件内容(识别python语法)
七、产生一个变量的三要素(重点!!!)
举栗子:定义一个变量name='Test'
1、变量值:用来表示状态
用变量名取变量值
print(name)
2、变量值的类型:表示不同的状态应该用不同类型的值去表示(数字:年龄,字符串:名字)
print(type(name))
3、变量值的id号:
print(id(name))
>>> name1='egon'
>>> name1,type(name1),id(name1)
('egon', <class 'str'>, 35494968)
判断值value是否相等:==
判断内存位置id是否相等:is
PS:对于两个value相等的变量,变量值长度短的时候它们的id号是一样的,变量值长度长的时候它们的id号是不一样的,这个没有明确的界限;
>>> x=1
>>> y=1
>>>
>>> id(x)
1626261168
>>> id(y)
1626261168
>>>
>>> x=1234567890123
>>> y=1234567890123
>>> id(x)
30057584
>>> id(y)
34827152
八、程序与用户交互
1、交互式输入
之前,我们去银行取钱,有专门的银行业务员让我们把自己的账号密码输入给他,然后他去进行验证,验证成功后,将取款金额告诉他。现在各个银行都为客户提供一台ATM机(就是一台计算机),让ATM机跟用户交互,从而取代人力。机器毕竟是死的,所以就需要编写程序来它运行,这就要求我们的编程语言中能够有一种能与用户交互,接收用户输入数据的机制。
#在python3中
input:用户输入任何值,都存成字符串类型
#在python2中
input:用户输入什么类型,就存成什么类型
raw_input:等于python3的input(用户输入任何值,都存成字符串类型)
2、注释
增加代码的可读性,让别人知道你写的代码是干什么用的。
代码注释分单行和多行注释, 单行注释用#,多行注释可以用三对双引号""" """
代码注释的原则:
1)不用全部加注释,只需要在自己觉得重要或不好理解的部分加注释即可
2)注释可以用中文或英文,但不要用拼音
3、文件头
#!/usr/bin/python
# -*- coding: utf-8 -*-
九、基本数据类型
1、什么是数据?为何要有多种类型的数据?
数据即变量的值,如age=18,18则是我们保存的数据。
变量的是用来反映/保持状态以及状态变化的,毫无疑问针对不同的状态就应该用不同类型的数据去标识
2、数字类型
1)int整型
定义:age=10 #age=int(10)
用于标识:年龄,等级,×××号,qq号,个数
2)float浮点型
定义:salary=3.1 #salary=float(3.1)
用于标识:工资,身高,体重,
3、字符串类型
定义:str=' '|" "|''' ''' (在引号(单引号,双引号,三引号)里定义的一堆字符)
PS:那单引号、双引号、多引号有什么区别呢?
单双引号木有任何区别,只有下面这种情况 你需要考虑单双的配合
msg = "My name is Egon , I'm 18 years old!"
多引号什么作用呢?作用就是多行字符串必须用多引号
msg='''
xxxx
yyy
zzz
'''
print(msg)
状态:描述性的内容,比如名字,性别,国籍
数字可以进行加减乘除等运算,字符串呢?也只能进行"相加"和"相乘"运算(字符只能跟字符串之间进行+或者*)
>>> name='egon'
>>> age='18'
>>> name+age #相加其实就是简单拼接
'egon18'
>>> name*5
'egonegonegonegonegon'
注意1:字符串相加的效率不高
字符串1+字符串3,并不会在字符串1的基础上加字符串2,而是申请一个全新的内存空间存入字符串1和字符串3,相当字符串1与字符串3的空间被复制了一次,
注意2:只能字符串加字符串,不能字符串加其他类型
4、列表类型
定义:[]方括号内,用逗号分隔开,存放多个任意类型的元素
状态:有序存放多个值
# info=['egon',18,'male',['欧德博爱','education',70]] #info=list([...])=
# print(info[0])
# print(info[3])
# print(info[3][0])
5、字典类型
背景:为何还要用字典?
存放一个人的信息:姓名,性别,年龄,很明显是多个值,既然是存多个值,我们完全可以基于刚刚学习的列表去存放,如下
>>> info=['egon','male',18]
定义列表的目的不单单是为了存,还要考虑取值,如果我想取出这个人的年龄,可以用
>>> info[2]
18
但这是基于我们已经知道在第3个位置存放的是年龄的前提下,我们才知道索引2对应的是年龄,即:
#name, sex, age
info=['egon','male',18]
而这完全只是一种假设,并没有真正意义上规定第三个位置存放的是年龄,于是我们需要寻求一种,即可以存放多个任意类型的值,又可以硬性规定值的映射关系的类型,比如key=value,这就用到了字典。
定义:{}花括号内,用逗号分割key:value,value可以是任意类型,但是key必须不可变类型
状态:存放多个值
# name age sex company
# info={
# 'name':'egon',
# 'age':18,
# 'sex':'male',
# 'company':{'name':'欧德博爱','type':'education','emp_count':70}
# }
#
# print(info['company']['type'])
PS:在{}内用逗号分隔,可以存放多个key:value的值,value可以是任意类型
定义:info={'name':'egon','age':18,'sex':18} #info=dict({'name':'egon','age':18,'sex':18})
用于标识:存储多个值的情况,每个值都有唯一一个对应的key,可以更为方便高效地取值。
6、布尔类型(True,False)
定义:计算机俗称电脑,即我们编写程序让计算机运行时,应该是让计算机无限接近人脑,或者说人脑能干什么,计算机就应该能干什么,人脑的主要作用是数据运行与逻辑运算,此处的布尔类型就模拟人的逻辑运行,即判断一个条件成立时,用True标识,不成立则用False标识。
状态:成立,不成立,用来做逻辑运算---》判断
#age=38
#print(age > 18)
补充个重点:可变类型和不可变类型
1.可变类型:在id不变的情况下,value可以变,则称为可变类型,如列表,字典
2.不可变类型:value一旦改变,id也改变,则称为不可变类型(id变,意味着创建了新的内存空间)
十、格式化输出
程序中经常会有这样场景:要求用户输入信息,然后打印成固定的格式,比如要求用户输入用户名和年龄,然后打印如下格式:
My name is xxx,my age is xxx.
很明显,用逗号进行字符串拼接,只能把用户输入的名字和年龄放到末尾,无法放到指定的xxx位置,而且数字也必须经过str(数字)的转换才能与字符串进行拼接。
这就用到了占位符,如:%s、%d
#%s字符串占位符:可以接收字符串,也可接收数字
#%d数字占位符:要注意d%只能接收数字
#接收用户输入,打印成指定格式
name=input('your name: ')
age=input('your age: ') #用户输入18,会存成字符串18,无法传给%d
print('My name is %s,my age is %s' %(name,age))
十一、基本运算符
计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,今天我们暂只学习算数运算、比较运算、逻辑运算、赋值运算
1、算数运算(+ - * / % // **)
2、比较运算(== != <> > < >= <=)返回True或者False
3、赋值运算(= += -+ *= /= %= **= //= )
4、逻辑运算(and or not)返回True或者False
5、身份运算
#is比较的是id
#而==比较的是值
十二、流程控制之if...else
逻辑运算,就是按照不同的条件做出不同的反映;
if语句的格式:
if expression:
statement1()
else:
statement2()
十三、while循环
1、使用循环的背景
不用写重复代码又能让程序重复一段代码多次? 循环语句!
2、语法
while 条件:
循环体
#如果条件为真,那么循环体则执行,执行完毕后再次循环,重新判断条件。。。
#如果条件为假,那么循环体不执行,循环终止
3、死循环(只要条件一直为True,循环就一直继续)
import time
number = 0
while True:
print(number)
time.sleep(1)
number += 1
4、循环嵌套与tag
tag=True
while tag:
......
while tag:
........
while tag:
tag=False
5、break与continue
#break用于退出本层循环
while True:
print "123"
break
print "456"
#continue用于退出本次循环,继续下一次循环
while True:
print "123"
continue
print "456"
6、while与else
与其它语言else 一般只与if 搭配不同,在Python 中还有个while ...else 语句,while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句
count = 0
while count <= 5 :
count += 1
print(count)
else:
print("循环正常执行完啦")
print("-----out of while loop ------")
#如果执行过程中被break了,是不会执行else的语句