01今日大纲
一. 格式化输出:
%s 占位字符串
%d 占位数字
%.2f 占位小数
"xxx%sx %sxx" % (变量, 变量)
二. 运算符:
a+=b a = a + b
and 并且. 左右两端同时为真. 结果才能是真
or 或者. 左右两端有一个是真. 结果就是真
not 非真既假, 非假既真
顺序: () => not => and => or
a or b:
如果a是0, 结果是b, 否则结果是a
a and b : 和or相反
三. 编码
ascii : 8bit 1byte, 英文字母+ 数字 + 特殊符号
gbk: 16bit 2byte, 主要是中文
unicode: 32bit 4byte
utf-8:
英文:8bit 1byte
欧洲:16bit 2byte
中文:24bit 3byte
encode() 编码成bytes字节
decode() 解码
四. 基本数据类型int和bool
int bit_length()
bool:
数据类型的转换
True: 1
False: 0
0: False
非0: True
结论: 如果想把x转化成y. y(x)
结论: 所有的空都认为是False
五. 基本数据类型str
索引和切片: 索引的下标从0开始
切片: [p:q:r] 从p到q每隔r出来1个
r如果是负数, 从右往左
常用的操作:
1. upper() 转化成大写.
2. split() 字符串切割. 切割的结果是列表
3. replace() 字符串替换
4. stript() 去掉左右两端的空白(空格, ,
)
5. isdigit() 判断是否是数字组成
6. startswith() 是否以xxx开头
7. find() 查找. 如果找不到返回-1
内置函数:
len()求字符串长度.
for循环
for 变量 in 可迭代对象:
循环体
in 和 not in
六 列表和元组
[元素, 元素]
列表有索引和切片
增删改查:
增加: append() insert()
删除: remove(元素) pop(索引)
修改: lst[index] = 新元素
查询: lst[index]
for item in lst:
循环体
深浅拷贝:
1. 赋值. 没有创建新列表
2. 浅拷贝. 只拷贝表面(第一层)
3. 深拷贝. 全部都拷贝一份
元组: 不可变, 主要用来存储数据
range(),可以让for循环数数(重点中的重点)
七. 字典
由{}表示. 以k:v形式保存数据
k必须可哈希. 不可变
增删改查:
1. 新增: dic['新key'] = 新value, setdefault(key, value)
2. 删除: pop(), del, cleart()
3. 修改: dic[key] = value
4. 查询: get(), dic[key], keys(), values(), items()
循环(必须要掌握):
1. for k in dic:
k
dic[k]
2. for k, v in dic.items():
k
v
八: set集合
特点: 无序, 不重复, 元素必须可哈希
add() 添加
九: is和==
is判断内存地址
==判断数据
十: 列表和字典的循环
在循环列表和字典的时候. 不能删除原来列表和字典中的内容
把要删除的内容记录在新列表中. 循环这个新列表. 删除老列表
下周要预习:
1. 文件操作
2. 函数
02格式化输出
%s 占位字符串
%d 占位数字
%f 占位小数
"xxx%sx %sxx" % (变量, 变量)
''' name = input("请输入第一个人的名字:") address = input("请输入一个地点:") name2 = input("请输入第二个人的名字:") # 我想打印 xxxx昨天去xxxx被xxxx撞见了 # 如果python的版本低于3.6 , 你只能用%的形式进行格式化输出 %s %d # 把 % 后面的内容按照位置往前面的%s位置放数据 # %s 占位字符串. 实际上可以占位任何东西(用的最多的) # %d 占位整数. 只能占位数字 print("%s昨天去%s被%s撞见了" % (name, address, name2)) ''' # print("alex兜里有%d元" % "100") # %d一般用的不多. 用的多的是%s
info = ''' ===============Alex Li================== ==Name: Alex Li========================= ==Job: 总经理========================== ==Address: 北京市昌平区美丽富饶的沙河==== ==Phone: 10086========================== ======================================== ''' print(info)
# 如果你的python是3.6以上, 此时可以使用模板字符串 # f"{变量}" name = "wusir" hobby = "打篮球" print("%s喜欢%s" % (name, hobby)) print(f"{name}喜欢{hobby}") # 模板字符串
003逻辑运算
# 一.算数运算 # + - * / % // ** # 二.比较运算 # > < >= <= == != # 三.赋值运算 # = 把等号右边的值赋值给左边的变量 # a += b = > a = a + b # a -= b = > a = a - b # *= # /= # a %= b = > a = a % b # 四.逻辑运算 # 1, and # 并且, 左右两端必须同时为真, 最终的结果才能是真, 有一个是假, 结果就是假 # 2, or # 或者, 左右两端有一个是真.结果就是真.全都是假, 结果才能是假 # 3, not # 非.不.非真既假, 非假既真 # # 如果出现混合逻辑运算.顺序: () = > not = > and = > or # # a or b # 如果a是0 # 结果是b # 如果a是非零, 结果就是a # # a and b # 和or相反
a = 10 b = 4 a %= b # a = 10 % 4 print(a)
#用while循环计数 1-100 i = 1 while i <= 100: print(i) # i = i + 1 i += 1
true类型
print(1 > 5 or 5 < 6 or 7 > 3) print(not False) print(1 > 3 or 5 < 7 and 6 > 8) print(not 1 > 5 and 4 < 6 or 7 > 8 and 1 < 9 or 5 > 6) # 0就是假 # 非0就是真 # a or b if a == False then b else a print(1 or 2) # 1 print(0 or 3) # 3 print(1 or 5) # 1 print(0 or 5) # 5 print(1 and 3) # 3 print(0 and 5) # 0 print(5 and 0) # 0 print(3 and 5) # 5 print(1 and 2 or 3) # 2 print(1 and 5 or 3 and 4 or 7 or 8 and 6 or 2) # 5 print(1 and 5 < 3 or 6) # 6 print(1 or 0 and 5 < 6 and 7 > 8 or 3)
字符串的索引和切片
索引就是第几个字符, 索引从0开始
# 切片 s = "alex昨天看冯提莫直播. 刷了1w个鱼丸" s1 = s[4:8] # 默认从左到右切, 顾头不顾尾[start, end) print(s1) s4 = s[6:] # 从6开始切, 切割末尾 print(s4) s5 = s[:6] # 从头开始切, 切到6为止 print(s5) s6 = s[:] # 从头到尾 print(s6) s1 = s[3:8:2] #从3到8 每2个出来1个 i喜和 print(s1) s2 = s[::2] print(s2) # 如果步长为负数, 从右到左 s3 = s[::-1] print(s3) s4 = s[-1:-6:-2] print(s4) s5 = s[-3::-3] print(s5)
带步长的切片
#判断是不是回文数 s = "上海自来水来自海上" s1=s[:] s2=s[::-1] if(s1==s2): print("yes") else: print("no")
004编码
# 美国人发明了关于美国文字在计算机中的显示效果 => ascii 里面编码的内容都是按照美国人的文字进行编码. ascii => 我们能看到的就是那一堆英文字母 + 数字 + 一些你键盘上能看到得所有特殊符号 # 编码就是用特定的排列组合来表示我们的文字信息 # a => 01 # 在ascii中使用8位01组合来表示一个ascii中的字符 # ascii在最开始只有7位=> 后来发现,7位很难处理. 为了扩展又添加了一位 => 8bit => 1byte # ascii中只有7位是有效的. 最前面的哪一位是空着的. 是0 # ascii中没有中文编码 提出一个标准 => ANSI => 在ascii基础上扩展8bit => 16bit=> 给各个国家进行编码 => GB2312 => GBK(国标码扩展码)=>gbk中包含了我们常用的中文, 日文, 韩文, 繁体字 # 国际化的操作依然不能实现 => UNICODE => 万国码 => 扩容=> us4 => 32bit => 把所有国家的文字进行同一 # 早期的unicode根本没有办法使用: 1.存储, 2.网络传输 # a =>8 => unicode => 32 # 1MB => 4MB # 随着机能的提高. 还有utf-8的产生. unicode可以使用了 # 0111 1111 # 把unicode重新进行定义 -> 可变长度的unicode => UTF-8, UTF-16 # utf-8: 最小的字节单位是8bit # utf-16: 最小字节单位: 16bit # 用的最多的编码就是utf-8 # 1. 英文: 8bit -> 1byte # 2. 欧洲文字: 16bit -> 2byte # 3. 中文: 24bit -> 3个字节 中文有9万多个 # python使用的是??? # python2.x使用的是ascii # python3.x内存中使用的unicode, 文件存储使用:utf-8
s = "古力娜扎" # 字符串直接就是unicode print(s) # 想要存储. 必须进行转换 => utf-8 或者GBK # unicode => UTF-8 # b'xe5x8fxa4xe5x8ax9bxe5xa8x9cxe6x89x8e' 字节 => 01 => 用来存储和传输 # b'xb9xc5xc1xa6xc4xc8xd4xfa' => gbk的编码 一个中文2个字节 bs = s.encode("gbk") print(bs)
# 解码 # bs = b'xb9xc5xc1xa6xc4xc8xd4xfa' # GBK bs = b'xe5x8fxa4xe5x8ax9bxe5xa8x9cxe6x89x8e' # utf-8 s = bs.decode("utf-8") print(s)
# 用什么编码. 就用什么解码 # 0,1 => 1bit # 8bit => 1byte # 1024byte => 1kb # 1024kb => 1mb # 1024mb => 1gb # 1024gb => 1tb # 1024tb => 1pb # .... # 简单的编码总结: # 1. ascii 8bit => 1byte 英文 + 数字 + 特殊符号 # 2. GBK 16bit => 2byte 中文 # 3. unicode 32bit => 4byte 万国码 # 4. utf-8 : # 英文: 8bit, 1byte # 欧洲: 16bit, 2byte # 中文: 24bit, 3byte # encode(编码) 编码. 得到的是bytes类型 # decode(编码) 解码. 得到字符串
005基本数据类型int 和 bool
# int类型的数据. 基本运算 +-*/ // ** # bit_length() 二进制长度 a = 3 # 11 print(a.bit_length()) # 二进制长度 2 # bool类型. 基本数据类型之间的互相转换 a = True print(type(a)) # <class 'bool'> # bool => int b = int(a) # 把xxx转化成数字 print(b) # True => 1 # True => 1 # False => 0 print(bool(0)) # False print(bool(-1)) # True # 0 => False # 非0 => True while 1: # while 1(效率高一点点) 和 while True print("还我钱!!!!!!") # 结论2: 你想把x转化成y 需要y(x) # 字符串 => 数字 # int(字符串) print(bool("")) # 能够表示False的字符串是空字符串 # 结论3: 所有表示空的东西都是假 print(bool(None)) # None : 空, 真空.
# str: 由双引号, 单引号, 三个单引号, 三个双引号括起来的内容 # 引号引起来的就是字符串. mingxing = '周杰伦的老婆是' print(mingxing) #下面哪行代码和当前这行代码是同一条代码 mingxing2 = "冯提莫的老公是" "'alex'" print(mingxing2) mingxing3 = '''卢本伟的老婆 是Uu''' print(mingxing3) mingxing4 = """陈一发儿""" print(mingxing4)
# 字符串的索引和切片 # 索引就是第几个字符, 索引从0开始 # 012 # -3-2-1 s = "jay" print(s[1]) # []表示索引 # print(s[2]) print(s[-1]) print(s[-3]) # 切片 s = "alex昨天看冯提莫直播. 刷了1w个鱼丸" s1 = s[4:8] # 默认从左到右切, 顾头不顾尾[start, end) print(s1) # s2 = s[8:4] print(s2) # s3 = s[-6:-2] print(s3) # s4 = s[6:] # 从6开始切, 切割末尾 print(s4) # s5 = s[:6] # 从头开始切, 切到6为止 print(s5) # s6 = s[:] # 从头到尾 print(s6) # 带有步长的切片 s = "wusir喜欢和alex一起去探讨课件" # s1 = s[3:8:2] # 从3到8 每2个出来1个 i喜和 print(s1) # s2 = s[::2] print(s2) # # 如果步长为负数, 从右到左 s3 = s[::-1] print(s3) # s4 = s[-1:-6:-2] print(s4) # s5 = s[-3::-3] print(s5) # 索引和切片: # 字符串[数字] 获取到第xx索引位置的字符 # 字符串[m:n] 从m开始获取到n结束. 永远娶不到n # 字符串[m:n:s] 从m到n结束. 每s个取1个 # 字符串相关操作: # 1. upper() 忽略大小写 # 2. split() 字符串的切割, 默认是使用空白切割 # 3. replace() 字符串替换 # 4. strip() 去掉左右两端的空白 # 5. startswith() 判断是否已xxx开头 # 6. find() 查找. 找不到返回-1 # 7. isdigit() 判断是否是数字组成 # 大小写转来转去 # 1. 首字母大写 s = "alex" s1 = s.capitalize() # 首字母大写, 字符串是不可变的数据类型. 每次操作都会返回新字符串 print(s) print(s1) # 2. upper() 把所有字母转化成大写 s = "wusir" s1 = s.upper() print(s1) while 1: game = input("请输入你喜欢玩儿的游戏(请输入Exit退出程序):") if game.upper() == "EXIT": # 忽略大小写 break print("你喜欢的游戏是%s" % game) # 3. lower() 全部转化成小写. 对一些欧洲文字不敏感 s = "wusir和ALEX关系不一般" print(s.lower()) # 4. title() 标题, 每个单词的首字母大写 s = "alex wusir ritian taibai nezha 女神" print(s.title()) # 切来切去 # 1. split() 字符串切割 s = "alex_wusir_taibai" ret = s.split("alex_wusir_taibai") # 如果切割的位置在边缘. 一定能获取到空字符串 print(type(ret)) # <class 'list'> 列表 print(ret) # 2. replace() 字符串的替换 s = "alex dsb, wusir xsb" print(s.replace("sb", "烧饼")) print(s.replace("sb", "")) # 3. strip() 去掉空白 => 脱掉空白 s = " 哈哈哈 哈哈哈 " # 制表符(缩进) 换行 print(s.strip()) # 去掉左右两端的空白(必须要记住) # username = input("用户名:").strip() password = input("密码:").strip() if username == "alex" and password == "123": print("登录成功了") else: print("登录失败") #张总. 用户名是alex 密码是123 s = "周杰伦 功夫足球 少林足球 足球少林" print(s.split()) # 找来找去 s = "php是全世界最好的编程语言" print(s.startswith("java")) # 判断这句话是否是以xxx开头 print(s.endswith("php")) # 判断是否以xxx结尾 name = input("请输入你的名字:") if name.startswith("张"): print("你是姓张的") else: print("你不是姓张的") s = "java, php, python, c++" print(s.count("av")) # 计算xxx字符串中出现的次数 s = "海王_剑姬_诺手_余小C喜欢用诺手" # print(s.find("手")) # 找的是索引 print(s.find("胡")) # 如果不存在. 返回-1 print(s.index("手")) # index: 索引 print(s.index("胡")) # index如果找不到. 报错 # 判断组成 # isdigit() 判断字符串是否由数字组成 s = "abc胡辣汤壹123@#$%" print(s.isdigit()) print(s.isalpha()) # 判断是否由文字的基本组成. print(s.isalnum()) # 是否由数字. 字母组成, 能屏蔽特殊字符 s = "123123壹佰贰拾伍万贰千三百四十六" print(s.isnumeric()) # 判断是否是数字, 两, 俩 # 字符串操作完结 # 1. len() 求字符串长度, 内置函数 s = "alex 和 wusir一堆好基友" print(len(s)) # 求字符串的长度 # 可以使用len来遍历字符串 print(s[0]) print(s[1]) print(s[2]) print(s[3]) print(s[108]) # string index out of range 字符串索引超过了边界 i = 0 while i < len(s): # 遍历字符串 print(s[i]) # alex # string index out of range i += 1 # i = 4 # for循环 # 语法: for 变量 in 可迭代对象: # 循环体 # 字符串是一个可迭代对象 s = "alex特别喜欢武藤兰" for c in s: # 把字符串s中的每一个字符赋值给前面的变量c print(c) for i in 10: # 'int' object is not iterable print(i) # in和not in 成员运算 s = "alex特别喜欢太白金星" if "胡辣汤" in s: print("对不起, 你的评论有敏感词") else: print("OK. 没问题") # while...else... # for...else... # i = 0 while i < 100: print(i) if i == 66: break # break不会执行else, 打断这个循环.没有经过条件判断所以. 不执行else i+=1 else: # 当判断结束的时候. 自动执行else print("数完了") # for循环和while循环一样也可以使用break和continue, 和else # for循环只有当迭代结束的时候才能执行else