Python语法基础和数据类型
时间:2023-01-16 18:30:00
第1章 Python基础 Day1 基本语法
1.1 介绍和分类编程语言
编程语言是什么? 本质上,它的目的与人类语言相同。 沟通 电流 一堆硬件 高电压1 低电压 0 高电压1 低电压 0 高电压1 低电压 0 8
晶体管 0101010101010 play sound 10100000 open file 机器语言 直接跟硬件打交道 汇编语言 开发效率低 0101010101010 <--- play_m 高级语言 对底层硬件的各种指令 做了封装 play_music("忽然.mp3") 人类代码 ——翻译———— 》机器语言 根据翻译方法的不同,产生了两个流派 编译型语言 人类代码 ————》一次性给代码 机器语言汇编(编译器) 代表 : 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 "", line 1, in 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+