第1章 Python基础 Day1 基本语法
1.1 编程语言介绍与分类
什么是编程语言?
本质上跟人类语言,目的一样。 沟通
电流+一堆硬件
高电压1 低电压 0
高电压1 低电压 0
高电压1 低电压 0 8 晶体管
0101010101010 play sound
10100000 open file
机器语言 直接跟硬件打交道
汇编语言 开发效率低
0101010101010 <--- play_m
高级语言
对底层硬件的各种指令 做了封装
play_music("忽然.mp3")
人类代码 ——翻译———— 》机器语言
根据翻译方式不同产生了2个流派
编译型语言
人类代码 ————》一次性把代码给 翻译官(编译器)————》汇编--》机器语言
代表 : c,c++,golang
优点:执行速度快
缺点:跨平台可移植性差
硬件 , cpu , 有自己指令规则 0000000001 打印, 1110000 play music
intel ,amd : 复杂指令集 ,高性能高功耗
ARM :精简指令集 手机 平板 , 低功耗
你的基于intel平台编译出来的程序是没有办法在arm平台上运行
软件,你的c程序想在windows,linux,mac同时可以运行,
windows invoke_window
linux,mac call_window
解释型语言
人类代码 ————》边执行边翻译(解释),陪同翻译(解释器/虚拟机) ————》机器语言
代表:python,php,java,ruby,c#
优点:跨平台好
缺点:翻译需要时间,执行速度 慢
机器理解的慢, 1ms, 10ms
大多数情况下, 语言的快慢是我们人类感知不到的。
1.2 Python介绍、发展趋势
Python发展史
Guido 龟叔 ,1989 Python
2005 - 2012 谷歌大量使用PY,2013 dropbox
2005 豆瓣 Python
2009 用python ,
2012 云计算,1000 = 1000 , Openstack Python
2012 讲Python, 自动化开发, 不会开发的运维终将被淘汰。
2014 AI兴起 ,
2017 大众视野
1.3 Python环境安装
Windows
mac
Linux
Unix
1.4 开发你的第一个Python程序
print("hello world!")
1.5 选择最好用的代码编辑器
PyCharm IDE
1.6 变量
y = 6
x =2
print(x+y) # 公式 调用
>>8
1. 先定义 变量, 存在内存里
2. 代码后调用
修改
1.7 注释
# 当行注释
"""多行注释"""
'''多行注释'''
1.8 基本数据类型
str 'Alex' int 23
01001 010101
数字
int 整数
2**62
type(age) 查看变量的数据类型
long 无限大
python3里,所有的整数都按int类型处理
float浮点数 ~ 小数
3.14159
其它语言里必须在声明变量前先定义 好其类型,强类型
弱类型语言
字符串
定义
name = "Alex" #有引号就是字符串,
"I'm Alex" 'alex "sdds" '
拼接
>>> s1="我本将心照明月"
>>> s2="无奈明月照沟渠"
s1+s2
段落/多行
'''sdf
sdfsdfdsf
'''
bool 布尔
a = 3
b = 5
b > a 正确/成立 真 True
b < a 错误/不成立 假 False
if today == raining True
print(take unbrealla)
else False
print(不用带)
列表 , 数组
Alex Egon OldVillageMaster Peiqi BlackGirl
>>> names
['Alex', 'Egon', 'OldTownMaster', 'Peiqi', 'BlackGirl']
>>> names[4]
'BlackGirl'
增
插入
>>> names.insert(4,"Alex")
>>> names
['Alex', 'Egon', 'OldTownMaster', 'Peiqi', 'Alex', 'BlackGirl']
追加 , 把元素抛入列表最后面
>>> names.append("小强")
>>> names
['Alex', 'Egon', 'OldTownMaster', 'Peiqi', 'Alex', 'BlackGirl', '小强']
删
>>> names[-1]
'小强'
>>> del names[-1]
>>> names
['Alex', 'Egon', 'OldTownMaster', 'Peiqi', 'Alex', 'BlackGirl']
改
>>> names
['Alex', 'Egon', 'OldTownMaster', 'Peiqi', 'Alex', 'BlackGirl']
>>> names[-1]
'BlackGirl'
>>> names[-1] = "黑姑娘"
>>> names
['Alex', 'Egon', 'OldTownMaster', 'Peiqi', 'Alex', '黑姑娘']
查
>>> names
['Alex', 'Egon', 'OldTownMaster', 'Peiqi', 'Alex', '黑姑娘']
>>>
>>>
>>> 'Peiqi' in names
True
>>> 'Peiqi2' in names
False
查到元素的下标并返回
>>> names.index("Peiqi")
3
>>>
>>>
>>> names.index("Peiqi2")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 'Peiqi2' is not in list
命令嵌套
>>> del names[names.index("Peiqi")]
>>> names
['Alex', 'Egon', 'OldTownMaster', 'Alex', '黑姑娘']
dict , set
tuple
1.9 读取用户指令
input 方法 接收 到的所有数据 都以字符串的格式处理
1.10 格式化打印
%s 是代表字符串
%d 整数
%f 浮点
1.11 运算符
1.算术运算:+-*/ 加减乘除 %取模 **幂函数 //取整除
2.比较运算:== != > < >= <=
3.赋值运算:= += -= *= /= %= **= //=
4.逻辑运算:and or not
1.12 流程控制之if…else
单分支
today_weather = "sun_day"
#单分支
if today_weather == "rain_day":
print("take your umbrella with you ")
双分支
#双分支
age_of_oldboy = 58
if age_of_oldboy > 50 :
print("Too old, time to retire..")
else:
print("还能折腾几年!")
缩进
Python的缩进有以下几个原则:
顶级代码必须顶行写,即如果一行代码本身不依赖于任何条件,那它必须不能进行任何缩进
同一级别的代码,缩进必须一致
官方建议缩进用4个空格
多分支
再来个匹配成绩的小程序吧,成绩有ABCDE5个等级,与分数的对应关系如下
A 90-100
B 80-89
C 60-79
D 40-59
E 0-39
程序启动,提示用户输入分数,根据分数打印等级 。
猜随机数
1.13 流程控制之while循环
break # 中止循环
continue # 中止本次循环,继续 下次循环
count = 0
while count < 100:
count += 1
if count > 10 and count < 20:
continue #
print(count)
dead loop
1.14 本章练习题&作业
双色球选购程序
三级菜单
股票查询
第一章总结:
1.主要是讲解了编程语言的分类,
2.Python的发展史,发展趋势
3.环境搭建
4.变量、注释、
5.基本数据类型:
1.数字:int、float
2.字符串:str
3.布尔值:bool false or true
4.列表:list 增删改查
6.用户输入:input()函数
7.运算符:
1.算术运算:+-*/ 加减乘除 %取模 **幂函数 //取整除
2.比较运算:== != > < >= <=
3.赋值运算:= += -= *= /= %= **= //=
4.逻辑运算:and or not
8.流程控制:
1.单分支if
2.双分支if-else
3.多分支if-elif-else
4.while循环
5.while-else循环
第二章 数据类型&文件操作
1.变量:
例1:name = 'old_boy'
身份运算:
is 判断两个标识符是不是引用自一个对象
例2:x is y ,类似id(x)==id(y),如果引用自同一个对象则返回true 否则false
is not 判断两个标识符是不是引用自不同对象
例:x is not y, 类似id(x)!=id(y).如果引用的不是同一个对象则返回true 否则false
空值None:
代表什么都没有的意思。
三元运算:
显的很NB的代码写法。
name = "Eva"
sex = None
# 普通写法
if name == "Eva":
sex = "Female"
else:
sex = "Male"
# 用三元运算来写
sex = "Female" if name == "Eva" else "Male"
a = b if b==0 else c
and、or、not的妙用:
通过以上的对比逻辑运算的执行顺序 not > and > or
2.二进制
首先,计算机一共就能做两件事:计算和通信
二进制的定义:
二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则
是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基
本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,
用“开”来表示1,“关”来表示0。
我们发现刚刚我们讲述的狼烟的故事和现在这个新理论出奇相似。假设狼烟点燃用1表示,狼烟灭掉用0表示,那么
刚刚我们用狼烟表示百万雄师的理论就可以用在计算机上,这种表示数字的方式就叫做二进制。
你可能会觉得发明计算机的人思路轻奇,为什么要多此一举的用这种方式来表达数字,但事实上计算机不像我们
这样智能,CPU是一个包含上百万个精巧的晶体管的芯片集合,晶体管表达感情的方式很简单,就是通过高低电压
(有电没电),低电压的时候表示0,高电压的时候表示1,因此最终能让计算机理解的就只有0和1而已。
二进制和十进制转换:
其实刚刚在无形中我们已经将10进制转换成2进制了,现在我们要再总结一遍。
刚才我们已经发现,二进制的第n位代表的十进制值都刚好遵循着2的n次方这个规律
填位大法:
先把他们代表的值依次写出来,然后再根据10进制的值把数填到相应位置,就好了~~~
十进制转二进制方法相同,只要对照二进制为1的那一位对应的十进制值相加就可以了。
3.字符编码
ASCII:
ASCII(American Standard Code for Information Interchange,
美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代
英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。
由于计算机是美国人发明的,因此,最早只有127个字母被编码到计算机里,也就是大小写英
文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母 A的编码是65,小
写字母 z的编码是122。后128个称为扩展ASCII码。
那现在我们就知道了上面的字母符号和数字对应的表是早就存在的。那么根据现在有的一些
十进制,我们就可以转换成二进制的编码串。
大小换算:
bit 位,计算机中最小的表示单位
8bit = 1bytes 字节,最小的存储单位,1bytes缩写为1B
1KB=1024B
1MB=1024KB
1GB=1024MB
1TB=1024GB
1PB=1024TB
1EB=1024PB
1ZB=1024EB
1YB=1024ZB
1BB=1024YB
GBK和GB2312
显然,对于我们来说能在计算机中显示中文字符是至关重要的,然而刚学习的ASCII表里连
一个偏旁部首也没有。所以我们还需要一张关于中文和数字对应的关系表。之前我们已经看
到了,一个字节只能最多表示256个字符,要处理中文显然一个字节是不够的,所以我们需
要采用两个字节来表示,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,
用来把中文编进去。
Unicode
因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,
就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。
现在,捋一捋ASCII编码和Unicode编码的区别:
ASCII编码是1个字节,而Unicode编码通常是2个字节。
字母A用ASCII编码是十进制的65,二进制的01000001;
字符0用ASCII编码是十进制的48,二进制的00110000;
汉字“中”已经超出了ASCII编码的范围,用Unicode编码是十进制的20013,二进制的01001110 00101101。
你可以猜测,如果把ASCII编码的A用Unicode编码,只需要在前面补0就可以,因此,A的Unicode编码
是00000000 01000001。
UTF-8....
4.数据类型-列表:
定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素。
列表的增删改查:
增:
追加:names.append("rain")
插入:names.insert(2,"黑姑娘")
合并:names.extend(n2)
嵌套:names.insert(2,[1,2,3])
删:
del 直接删: del names[2]
pop 删:names.pop(1) #删除指定元素
clear 清空:n2.clear()
改:
names[0] = "金角大王"
查:
names.index("eva") #返回从左开始匹配到的第一个eva的索引
names.count("eva") #返回eva的个数
切片:names[1:4] #不包含下标4的元素
倒着切:names[-5:-1]
步长:a[::3] #按步长3打印列表,第1个:是省略掉的start:end
列表反转:a[::-1] #通过把步长设置成负值,可达到列表返转的效果
排序:
a.sort()
反转:
names.reverse()
5.数据类型-元组:
定义:与列表类似,只不过[]改成()
特性:
1.可存放多个值
2.不可变
3._按照从左到右的顺序定义元组元素,下标从0开始顺序访问,有序
创建:
ages = tuple((11, 22, 33, 44, 55))
6.数据类型-字符串:
字符串是一个有序的字符的集合,用于存储和表示基本的文本信息,
’ ‘或’’ ‘’或’’’ ‘’’中间包含的内容称之为字符串
特性:
1.按照从左到右的顺序定义字符集合,下标从0开始顺序访问,有序
2.可以进行切片操作
3.不可变,字符串是不可变的,不能像列表一样修改其中某个元素,所有对字符串的
修改操作其实都是相当于生成了一份新数据。
补充:
1.字符串的单引号和双引号都无法取消特殊字符的含义,如果想让引号内所有字符均
取消特殊意义,在引号前面加r,如name=r’l\thf’
创建:
s = 'Hello,Eva!How are you?'
7. 数据类型-字典:
定义:{key1:value1,key2:value2}
1.键与值用冒号":"分开;
2.项与项用逗号","分开;
info = {"name":"小猿圈","age":18}
创建
person = dict(name='server', age=20)
增
info["佩奇"] = [26,"讲师",400] --- 还有 setdefault("server", [1,2,3])
删
del info["name"] 删除指定的key,同pop方法
info.pop("佩奇") 删除指定key
info.popitem() 随便删除一个key
info.clear() 清空dict
改
info["name"]="new_data" 如果key在字典中存在,"new_data"将会替代原来的value值
dic.update(dic2) 将字典dic2的键值对添加到字典dic中
查
info['key']
8.数据类型-集合:
定义:set() 去重
增:
a.add('黑姑娘')
删:
a.discard('rain') #删除一个存在的值
a.pop() #删除并返回
a.remove(4)
改:
呵呵,不能改。。。
查:
'alex' in a
9.hash是什么东西:
hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)
通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散
列值的空间通常远小于输入的空间
哈希算法不过是一个更为复杂的运算,它的输入可以是字符串,可以是数据,可以是任何文件,经
过哈希运算后,变成一个固定长度的输出,该输出就是哈希值。但是哈希算法有一个很大的特点,
就是你不能从结果推算出输入,所以又称为不可逆的算法
哈希的用途:
1.密码,我们日常使用的各种电子密码本质上都是基于hash的,你不用担心支付宝的工作人员
会把你的密码泄漏给第三方,因为你的登录密码是先经过 hash+各种复杂算法得出密文后
再存进支付宝的数据库里的
2.文件完整性校验,通过对文件进行hash,得出一段hash值 ,这样文件内容以后被修改了,
hash值就会变。 MD5 Hash算法的”数字指纹”特性,使它成为应用最广泛的一种文件完整性校
验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
3.数字签名,数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收
者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要
信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,
否则说明信息被修改过,因此数字签名能够验证信息的完整性。
此外,hash算法在区块链领域也使用广泛。
10.用Python操作文件:
占硬盘方式的文件修改代码示例
f_name = "兼职白领学生空姐模特护士联系方式.txt"
f_new_name = "%s.new" % f_name
old_str = "刘诺涵"
new_str = "[黑姑娘]"
f = open(f_name,'r')
f_new = open(f_new_name,'w')
for line in f:
if old_str in line:
new_line = line.replace(old_str,new_str)
else:
new_line = line
f_new.write(new_line)
f.close()
f_new.close()
上面的代码,会生成一个修改后的新文件 ,原文件不动,若想覆盖原文件
import os
f_name = "兼职白领学生空姐模特护士联系方式.txt"
f_new_name = "%s.new" % f_name
old_str = "刘诺涵"
new_str = "[黑姑娘]"
f = open(f_name,'r')
f_new = open(f_new_name,'w')
for line in f:
if old_str in line:
new_line = line.replace(old_str,new_str)
else:
new_line = line
f_new.write(new_line)
f.close()
f_new.close()
#把新文件名字改成原文件 的名字,就把之前的覆盖掉了,windows使用os.replace
# 帮助文档说明replace会覆盖原文件
os.rename(f_new_name,f_name)
第二章总结:
1.变量的创建:赋值和修改、内存地址的指向
2.身份运算:三元运算
3.列表:增删改查、切片、反转、插入、步长、遍历、排序
4.元组:增删改查:呵呵 不能改 元组不可变
5.字符串:切片、字母大小写、替换、查找
6.字典:增删改查、长度、循环字典
7.集合:交集并集、去重、增删改查、关系运算
8.二进制、十进制、十六进制:相互转换
9.字符编码
10.hash算法
11.操作文件:
open()
with open() as e
write()
read()
close()
r r+ w w+ a a+