python学习笔记三

第一章

1 if语句

1-1. if双分支

#1.if双分支应用举例:

money = int(input('你口袋还有多少钱?').strip())
if money > 3000:
    print('去吃烧烤!')
else:
    print('去喝稀饭!')
print("回家休息!")

1-2. if多分支

#2.if多分支应用举例
#if条件成立以后,后续操作不会再执行!例如输入85, 执行90 80,执行到80后就不会再往下执行了!
count = int(input('请输入成绩:').strip())
if count >=90:
    print('A')
elif count >=80:
    print('B')
elif count >= 60:
    print('C')
else:
    print('D')

1-3. if嵌套

#3.if嵌套应用!
username = input('请输入您的用户名:').strip()
passname = input('请输入您的密码:').strip()
if username == 'admin':
    if passname == '112233445566':
        print('登陆成功!')
    else:
        print('您的密码错误!')
else:
    print('您的用户名错误!')

2 while循环

2-1 无限循环

#1.模拟无线循环 循环条件永远成立
while True:
    print('我们都一样')
    print('我们不一样')
    print('有啥不一样')

2-2 循环三次

#2.把无限循环改成循环3遍.
i = 0
while i < 3:
    print('我们都一样')
    print('我们不一样')
    print('有啥不一样')
    i += 1

2-3 数数

#3.通过while循环数数:
i = 1
while i <= 99:
    print(i)
    i += 1
# ======================
#倒着数:
i = 100
while i >= 1:
    print(i)
    i -= 1
#扩展 找到1到99之间所有奇数
i = 1
while i <= 99:
    yu = i % 2  
    if yu != 0:
        print(i)
        i += 1
    else:
        i += 1

2-4 累加

#while 累加计算 求1到任意整数的和
a = 0
sum = 0
num = int(input('输入:').strip())
while a <= num:
    sum = sum + a
    if a == num:  #加这个if语句的目的是只打印最后的那个和
        print(sum)
    a += 1
#计算1到n的平方和
i = 1
sum = 0
n = int(input('输入:').strip())
while i <= n:
    sum = sum + i**2
    if i == n:
        print(sum)
    i += 1

2-5 结束循环

改变循环条件
#结束while循环! 
# 1.while循环可以嵌套if, 也可以嵌套while 
# 2.结束一个循环的方式 改变循环条件
flag =True
while flag:
    content = input('请输入你要说的话(输入Q退出):').strip()
    if content == 'Q':
        flag = False
    else:
        print('有人说:' + content)
break
#利用break结束while整个循环
while True:
    content = input('请输入你要说的话(输入Q退出):').strip()
    if content == 'Q':
        break
    print('有人说:' + content)
continue
#利用contiune结束当前循环,进入下一个新的循环
while True:
    content = input('请输入你要说的话(输入Q退出):').strip()
    if content == 'Q':
        continue
    print('有人说:' + content)
# 0-9 找奇数
for i in range(10):
    if i % 2 == 0:
        continue
    print(i)

第二章

1.格式化输出

1-1 %占位符

%s表示在字符串中占位,稍后会填充字符串 万能占位符
%d表示字符串中占位整数(digit)
%f表示在字符串中占位小数(float)%.2f保留小数点后两位(遵循四舍五入),如果没有说明保留小数位数,默认保留6位小数,不足用0补齐

name = 'Andi'
age = 18
wages = 11111.1199
print('他的名字叫%s,今年%d,工资是%.3f' % (name, age, wages))
# 他的名字叫Andi,今年18,工资是11111.119903

1-2 format

name = 'Andi'
age = 18
wages = 11111.11990261234
print('他的名字叫{},今年{},工资是{}'.format(name, age, wages))
# 他的名字叫Andi,今年18,工资是11111.11990261234

1-3 f’str’

name = 'Andi'
age = 18
wages = 11111.11990261234
print(f"他的名字叫{name},今年{age},工资是{wages}")
# 他的名字叫Andi,今年18,工资是11111.11990261234

2.运算符

2-1 算术运算符

算数运算符: +, -, *, /, //, %, **

2-2 比较运算符

比较运算符: >, <,>=, <=, ==, !=. 返回的是一个bool值

2-3 赋值运算符

赋值运算: =, +=(累加), -=(递减).

2-4 逻辑运算符

逻辑运算 :
and(并且 两边同时为真值才为真),
or(或者 有一边为真结果就为真),
not(非,不 非真即假,非假即真).

#账号登录
username = input('请输入用户名:').strip()
password = input('请输入密码:').strip()
if username == 'admin' and password == '112233445566':
    print('登录成功')
else:
    print('登陆失败')
username = input('请输入用户名:').strip()
password = input('请输入密码:').strip()
if username == 'admin' or password == '112233445566':
    print('登录成功')
else:
    print('登陆失败')

2-5 成员运算

in(判断什么什么是不是在什么什么里面)not in(与in相反)

#让用户输入评论信息 需要过滤敏感词
#判断敏感词
content = input('请输入评论信息:').strip()
if '呵呵' in content:
    print('有敏感词')
else:
    print('没有敏感词')
# 需求升级 判断 呵呵 和 哈哈 是不是在评论里面
content = input('请输入评论信息:').strip()
if '呵呵' in content or '哈哈' in content:
    print('有敏感词')
else:
    print('没有敏感词')

3.bytes

s = '中国' #内存中存储使用的编码是unicode
#编码encode() 把字符串等信息转化为字节 例如将str转化为bytes  文件传输必须要编码
# bs = s.encode('utf-8') #用utf-8对内存里的字符串进行编码 完成后传给变量bs
# print(bs)   #b'\xe4\xb8\xad\xe5\x9b\xbd'  betys数据类型 每个\x一个字节 utf-8中一个汉字占3个字节

# bs = s.encode('gbk')
# print(bs) # b'\xd6\xd0\xb9\xfa'  GBK编码中一个汉字占两个字节
#解码decode() 把字节转化为字符串
bs = b'\xd6\xd0\xb9\xfa'
s = bs.decode('gbk')
bs = s.encode('utf-8')
print(bs)
#不同编码之间不能直接转换  先把字节解码转为字符串 再把字符串编码为想要的编码格式
#byte: python中最小的数据单位
#bytes:可以用于描述一切对象的的最小单位集合

4.bool

int 与 bool转化

#int 与 bool转化  #非0都是True 0是Flase
a = 10
b = bool(a)
print(a)
#数字1(非0)可以当成True来用,0可以当作Flase来用

str 与 bool转换

# #str 与 bool转换  #字符串中只要有东西,哪怕是一个空格,都是True,只有空字符串是Flase.
a = '呵呵'
b = bool(a)
print(b)

list 与bool

#列表lst 与bool
a = []
b = bool(a)
print(b)

str转int

#把字符串转化成数字 str==>int()
a = '123'
b = int(a)
print(b)
print(type(b))

int转str

#把数字变成字符串  int==>str()
a = 1
b = str(a)
print(b, type(b))

总结

1.所有空的东西都可以表示Flase
2.int str bool 相互转化的时候,
想转换成谁,就用谁把信息括起来 str(信息)转字符串;bool(’信息‘)转bool;in(‘信息’)转整数

5.字符串

5-1 索引

#1.索引  即字符串下标  取字符串中单个字符 用 str[索引]的方法
# a = '日照香炉生紫烟,遥看瀑布挂前川.'
#    0 1 23 45 6 7 89101112131415
#                  -7-6-5-4-3-2-1
# s1 = a[0]
# print(s1)

5-2 切片

#2.切片  即从字符串中取出一串字符 格式 str[start:end:step]   此时step>0(默认为1), 且start<end特点:前闭后开
# a = '日照香炉生紫烟,遥看瀑布挂前川.'
# s1 = a[1:3]   #从第1个索引到第2个索引的所有字符
# s2 = a[3:]    #后面不写表示切到末尾
# s3 = a[:8]    #前面不写表示从头开始切
# s4 = a[:]     #前后都不写表示从头切到尾
# # print(s1, s2, s3, s4)
#如果切片想从右往左切,需要给出第三个参数 step  str[start:end:step]  此时step<0, 且start>end 仍然是前闭后开
# s5 = a[14:1:-1]
# print(s5)
# a = '0123456789'
# s6 = a[1:9:2]    #从第1个索引开始,步长为2 想当于两个里面取一个.
# s7 = a[9:1:-2]
# print(s7)
#练习 判断一句话是不是回文 ‘上海自来水来自海上’
world = input('请输入:').strip()
r_world = world[::-1]   #利用str切片 把字符顺序倒过来
if world == r_world:
    print('这句话是回文!')
else:
    print('这句话不是回文!')

5-3 字母大小写转换

#3.字符串大小写   重点 upper  格式str.upper()表示字符串内字母全部大写 目的:在用户输入时防止出现大小写错误
s = 'i am Jocker !'
s1 = s.capitalize()   #把字符串首字母大写
s2 = s.lower()        #把字符串字母全变成小写
s3 = s.upper()        #把字符串全部变成大写
s4 = s.swapcase()     #大小写互相转化
s5 = s.title()        #每个单词的首字母大写
print(s)
print(s5)
#str.upper()应用举例:
while True:
    content = input('请输入你相对打野说的话(输入Q退出):').strip()
    if content.upper() == 'Q':              #content.upper() 把用户输入能内容全部大写 即可忽略用户输入字母的大小写!
        break
    else:
        print(content)

5-4 切来切去

center()

#4-1字符串居中 str.center(宽度,填充)
s = 'Jocker'
s1 = s.center(10, '0')   #填充必须是字符00Jocker00  如果没有填充 默认为空格填充
print(s1)

strip()

#4-2 strip() 默认是去掉字符串左右两端的空白(空格 \t(Tab缩进) \n(换行)) strip('?')去掉字符串左右两端的'?'
#用户登录:可以输入空格而不报错
username = input('请输入用户名:').strip()   #如果没有.strip() 则输入空格就会报错
password = input('请输入密码:')            #.strip()
if username == 'admin' and password == '123456':
    print('登录成功')
else:
    print('登陆失败')

replace()

#4-3 replace() 字符串替换 str.replace(旧字符串,新字符串)
s = '我喜欢吃榴莲!'
s1 = s.replace('榴莲', '**')
print(s1)

split()

#4-4 split() 字符串切割 无参数 默认用空格切
s = '张无忌_赵敏_周芷若_小昭_珠儿'
s1 = s.split('_')   #用字符串中'_'切割  得到的结果是一个列表
s2 = s.split('_', 1) #从左边用'_'切割 只切一次
s3 = s.rsplit('_', 2) #从右边用'_'切割 切两次
print(s1, s2, s3)

join()

#4-5 join() 把一个列表组装成一个字符串
lst = ['张无忌', '赵敏', '周芷若', '小昭']
lst = '_'.join(lst)   #用下划线将列表里面的字符串连接起来 组成一个新的字符串
print(lst)

5-5 format()

#5. 字符串的格式化输出 .format
name = '张无忌'
age = 18
s = '我叫{},今年{}'.format(name, age)
s1 = '我叫{0},今年{1}'.format(name, age)
s2 = '我叫{1},今年{0}'.format(name, age)
s3 = '我叫{a},今年{b}'.format(b=age, a=name)
print(s, s1, s2, s3)

5-6 查找

# str.startswith('#') 判断一个字符串是否以'#'开头  str.endswith('#') 判断是否以'#'结尾
#str.count('a') 计数字符a出现的次数  str.find('a')查找字符所在的位置(返回的是一个索引)

startswith()

#6-1 startswith() 让用户输入一个名字 判断这个名字是否以欧阳开头
name = input('请输入姓名:').strip()
if name.startswith('欧阳'):
    print('是以"欧阳"开头')
else:
    print('是不是以"欧阳"开头')

endswith()

#6-2 endswith() 同startswith 不过是判断结尾

count()

#6-3. count('a')计数
s = 'my name is alxs'
num = s.count('a')
print(num)

find()

#6-4 str.find('')查找  找到就返回字符的第一个索引  找不到返回-1
s = '我最喜欢听的歌曲就是<<明天会更好>>'
s1 = s.find('冬天')
print(s1, type(s1))

index()

#6-5 str.index()也是查找 找到返回索引 找不到就会报错
s = '我最喜欢听的歌曲就是<<明天会更好>>'
s1 = s.index('天')
print(s1, type(s1))

5-7 条件判断

#7-1 条件判断
money = int(input('请输入你兜里的钱:').strip())  #input接受的是字符串 无法与int做比较 所以先将字符转化为int,但是在与数字判断时如果输入非数字,拿转化就会报错
if money > 3000:
    print('吃大腰子')
else:
    print('吃小腰子')
#改进:防止输入非数字报错
money = input('请输入你兜里的钱:').strip()
if money.isdigit():   #判断字符串是否由纯数字(整数)组成
    if int(money) > 3000:
        print('吃大腰子')
    else:
        print('吃小腰子')
else:
    print('您输入的不是纯数字!')

源码解读

# 7-2源码解读
# 使用方法1 例如输入str 按住键盘的Ctrl,用左键点击
# 使用方法2 print(dir(str)) 查看str有那些操作
print(dir(str))  #查看str这个数据类型能执行那些操作

5-8 len()

#8 计算字符串的长度  len() 是一个内置函数  计算 字符串 列表等 长度
s = 'sda你好啊111'
print(len(s))

5-9 迭代

while遍历

#用while循环便利
s = '大家好,我是周杰伦!'
i = 0
while i < len(s):
    s1 = s[i]
    print(s1)
    i +=1

for遍历

#用for循环便利
s = '大家好,我是周杰伦!'
for s1 in s:
    print(s1)

in 的用法

#in 的用法
# 1.如果在for里面,就把每一个元素赋值给前面的变量 for a in str:
# 2.如果不在for中,判断字符是不是在字符串里面 print('xx' in str)
#练习 计算字符串中出现了几个数字
s = '我叫周杰伦,今年18岁了,我养了3只狗'
count = 0
for i in s:
    if i.isdigit():
        count +=1
print(count)

6 列表

列表概述

[ ]里面可以放任何数据类型,元素之间用’,'隔开 列表是可变数据类型

列表的索引和切片

和字符串一样 索引得到的是字符串 不同处 列表切片得到的数据是列表

列表的新增操作

lst = ['张无忌', '周芷若', '赵敏', '小昭', '珠儿', '朱九真']
# 3-1.lst.append('str')在列表末尾追加一个元素   常用
lst.append('杨不悔')
print(lst)
# 3-2 lst.insert(1, 'obj') 在列表第1个位置插入obj 原第1个元素往后挪
lst.insert(1, '杨不悔')
print(lst)
# 3-3 把某列表用append方式加入到lst里面  得到的结果是列表里面嵌套一个列表
n = ['张翠山', '殷素素']
# lst.append(n)  # ['张无忌', '周芷若', '赵敏', '小昭', '珠儿', '朱九真', ['张翠山', '殷素素']]
lst.extend(n)   #如果用extend方式添加列表 那会将元素全部加入lst['张无忌', '周芷若', '赵敏', '小昭', '珠儿', '朱九真', '张翠山', '殷素素']
print(lst)

列表的删除

lst = ['张无忌', '周芷若', '赵敏', '小昭', '珠儿', '朱九真']
# 4-1 lst.remove('张无忌')  按照元素删除
lst.remove('张无忌')
# 4-2 lst.pop()  #弹出列表里面最后一个 可返回被弹出的对象,pop还可以指定位置弹出 lst.pop(1) 弹出索引为1的元素 返回弹出的对象
item = lst.pop(1)
print(lst)
print(item)
# 4-3 del lst[i]删除列表第几个元素
del lst[1]
print(lst)
# 4-4 lst.clear() 清空列表
lst.clear()
print(lst)

列表的修改

# lst[i] = 'str' 把类别第i个位置更改成str
lst = ['张无忌', '周芷若', '赵敏', '小昭', '珠儿', '朱九真']
lst[0] = '任盈盈'
print(lst)

列表的查询

列表是个可迭代对象

lst = ['张无忌', '周芷若', '赵敏', '小昭', '珠儿', '朱九真', '周伯通']
# 1 for循环  这种方式只能看到元素
for item in lst:
    print(item)
# 2 len(lst) 获取索引和元素
for i in range(len(lst)):
    print(i)
    print(lst[i])
# 3 enumerate(lst)获取索引和元素
for index, item in enumerate(lst):
    print(index, item)

列表的嵌套

lst = ['张无忌', '张翠山', ['张三丰', '殷梨亭', ['宋青书', '周芷若', 100, '谢逊'], '宋远桥'], '成昆']
# 找到宋青书,将宋青书改成张无忌
print(lst[2][2][0])
lst[2][2][0] = lst[0]
print(lst)
# 把周芷若的若改成偌
lst[2][2][1] = lst[2][2][1].replace('若', '偌')  # 因为字符串不可变 所以需要新建字符串,把字符串再赋值给原字符串替换掉
print(lst)
# 把100乘以10再放回去
lst[2][2][2] = lst[2][2][2]*10
lst[2][2][2] *=10
print(lst)
# 把谢逊的逊字打印出来 在列表中也可以对列表里面的字符串中的字符进行索引
print(lst[2][2][3][1])

列表的其他操作

lst1 = ['张无忌', '周芷若', '赵敏', '小昭', '珠儿', '朱九真', '周伯通', '张无忌']
lst = [11, 2, 33, 24]
print(lst1.count('张无忌'))    # 1计数
lst.reverse()                # 2翻转排序
lst.sort()                   # 3从小到大排序
lst.sort(reverse=True)         # 4从大到小排序
print(lst)

补充列表的删除

5-1.列表和字典在循环的时候不能删除 列表通过索引删除 删不干净

# 删除所有姓张的人
# 5-1-1下面这个操作删不干净
lst = ['张无忌', '张翠山', '张三丰', '张五侠']
for name in lst:
    if name.startswith('张'):
        lst.remove(name)
print(lst)
# 5-1-2 把要删除的内容记录在一个新列表里 循环这个新列表 删除旧列表
lst = ['张无忌', '张翠山', '张三丰', '张五侠', '谢逊', '殷素素']
lst1 = []
for name in lst:
    if name.startswith('张'):
        lst1.append(name)  # 把要删除的内容添加到新列表里面
for item in lst1:
    lst.remove(item)      # 循环新列表 删除旧列表
print(lst)
# 5-1-3 通过浅拷贝删除
lst = ['张无忌', '张翠山', '张三丰', '张五侠', '谢逊', '殷素素']
for name in lst[:]:   #lst[:]想当于复制了一个lst
    if name.startswith('张'):
        lst.remove(name)
print(lst)

7 tuple(元组)

概述

tuple(元组):不可变列表,又被称为只读列表!主要作用就是存储数据 格式(‘撒旦’,‘打赏’)

索引和切片

元组也有 索引 切片 也可以循环但是不支持更改里面的元素

一个元素的元组

# 当元组里面只有一个元素时, 
k = (1)
print(k) # 1 这时候的括号相当于优先级运算符
k = (1, ) 
print(k) # 得到(1, )

元组内的嵌套列表

k = ('张无忌', '张翠山', [], '殷素素')
k[2].append('谢逊')
print(k)

8 字典

字典概述

字典是python中唯一一个映射数据类型,字典里面的元素是成对出现的 {key:vlue}.
key必须是不可变的数据类型 例如int str tuple bool 而 列表 字典 集合都是可变的 所以这些数据类型不能作key.
字典获取vlue的方法同列表的索引 区别在与是通过key获取vlue.

d = {'谢逊': '金毛狮王', '张翠山': '张武侠', '张无忌': '明教教主', '殷素素': '天鹰教魔女'}
print(d.get('谢逊'))
print(d['谢逊'], type(d['谢逊']))

字典的增加和修改

# 2-1增加数据   格式: d[key] = vlue
d['成昆'] = '混元霹雳手'   #会在字典末尾增加'成昆': '混元霹雳手'
# 2-2修改数据 根据key修改vlue  如果没有key 就是新增 如果本来就有k 就是修改
d['张翠山'] = '张五侠'
# print(d)
# 2-3 新增 格式:d.setdefauit(key, vlue)  1.这个k必须是原来字典中不存在的 如果存在就不会被应用
d.setdefault('杨晓', '光明做事')
print(d)

字典的删除

d = {'谢逊': '金毛狮王', '张翠山': '张武侠', '张无忌': '明教教主', '殷素素': '天鹰教魔女'}
# 1.d.pop(key) 删除后 会返回vlue
dd = d.pop('谢逊')
print(d)
print(dd)
# 2.d.clear()全部删除  
d.clear()
print(d)
# 3.del d['谢逊']
del d['谢逊']
print(d)

字典的查询

d = {'谢逊': '金毛狮王', '张翠山': '张武侠', '张无忌': '明教教主', '殷素素': '天鹰教魔女'}
# 1.d[key]如果key不存在就会报错 
print(d['谢逊'])
# 2.d.get(key)如果key不存在 返回NONE 
print(d.get('谢逊')
# 3.d.get(key, vlue)当key不存在时 返回一个默认的vlue
print(d.get('谢四', '没有啊'))
# 4 d.setdefault() 除了由新增功能外 还有查询功能 执行完新增后 会根据key查询vlue
print(d)
print(d.setdefault('杨晓', '光明做事'))
print(d)

练习:把大于50的放一起 小于50的放一起

#代码1
lst = [100, 11, 22, 33, 44, 55, 66, 77, 88, 99]
result = {}  # 先创建一个空字典
for item in lst:
    if item > 50:
        if result.get('bigger') is None:  # 如果没有 key
            result['bigger'] = [item]  # 就新增一个 k y(列表)
        else:
            result['bigger'].append(item)  # 如果有这个列表了 就在这个列表中增加元素
    else:
        if result.get('smaller') is None:
            result['smaller'] = [item]
        else:
            result['smaller'].append(item)
print(result)
# 代码2
lst = [11, 22, 33, 44, 55, 66, 77, 88, 99]
result = {}
for item in lst:
    if item > 50:
        result.setdefault('bigger', []).append(item)   # 没有k=bigger,就会新增一个 并把这个item放入一个列表里面 如果有了就直接在这个列表里面增加item
    else:
        result.setdefault('smaller', []).append(item)
print(result)

字典的循环

d = {'谢逊': '金毛狮王', '张翠山': '张武侠', '张无忌': '明教教主', '殷素素': '天鹰教魔女'}
# 3-1 直接for循环  打印的是key
for k in d:
    print(k)
    print(d[k])
# 3-2 借助字典的d.keys()拿到所有的key
print(d.keys())  # 结果: dict_keys(['谢逊', '张翠山', '张无忌', '殷素素'])
for k in d.keys():
    print(k)
    print(d[k])
# 3-3 d.values() 拿到所有的value  可以通过k拿到v,但是不能通过v拿到k
print(d.values())  # dict_values(['金毛狮王', '张武侠', '明教教主', '天鹰教魔女'])
for item in d.values():
    print(item)
# 3-4通过 items() 拿到所有数据 每一个键值对会变成一个元组
print(d.items())  # dict_items([('谢逊', '金毛狮王'), ('张翠山', '张武侠'), ('张无忌', '明教教主'), ('殷素素', '天鹰教魔女')])
for item in d.items():
    k = item[0]
    v = item[1]
    print(k, v)
# 3-5 解构    k, v = item(元组:(k, v))
for k, v in d.items():
    print(k, v)
    

字典的嵌套

d = {
    'name': '张无忌',
    'age': '15',
    'father': {'name': '张翠山',
               'age': 35,
               'wife': {'name': '殷素素',
                        'age': 32,
                        'hobby': ['武术', '计谋']
                        },
               'hobby': ['武术', '烹饪', '写字']
               },
    'wife': [
             {'name': '赵敏', 'age': 18},
             {'name': '周芷若', 'age': 19},
             {'name': '小昭', 'age': 16}
             ],
    'hobby': ['武术', '教主']
}
# 4-1 查询 殷素素的第2个爱好
print(d['father']['wife']['hobby'][1])
# 4-2 给张翠山添加一个爱好 探险
d['father']['hobby'].append('探险')
# 4-3 给 小昭 加一岁
d['wife'][2]['age'] = d['wife'][2]['age'] + 1  #int为不可更改数据类型 所以需要重新赋值更改
d['wife'][2]['age'] += 1
print(d)

补充字典的删除

5-2 字典的删除 在循环字典时 删除数据 是会报错的

# 5-2-1 把要删除的内容记录在列表中 循环删除
# 删除value是姓张的
d = {'谢逊': '金毛狮王', '张翠山': '张武侠', '张无忌': '明教教主', '殷素素': '张天鹰教魔女'}
lst = []
for k, v in d.items():
    if v.startswith('张'):
        lst.append(k)   #把value姓张的放到新列表里面
print(lst)
for k in lst:            #循环新列表 把字典中要删除的内容删除掉
    d.pop(k)
print(d)
# 删除k是'张'开头
d = {'谢逊': '金毛狮王', '张翠山': '张武侠', '张无忌': '明教教主', '殷素素': '张天鹰教魔女'}
lst = list(d.keys())  #把d的k组成成一个新列表
for k in lst:
    if k.startswith('张'):
        d.pop(k)
print(d)

9 set集合

概述

set集合 里面的元素是不重复的 无序的 元素必须是可哈希的(int str bool tuple)
可以认为set是dict类型的数据 但不保存value 只保存key 。 set集合用{}表示

去重复

lst = ['张无忌', '张翠山', '谢逊', '张翠山']
s = set(lst)
print(s)

交、并、差

zhangsan = {'长白山', '三亚', '克拉玛依', '纳木错'}
lisi = {'长白山', '纳木错', '敦煌', '成都'}
# 1-2-1两人都去过的地方 即 求交集 格式: {}&{}
print(zhangsan & lisi)
# 1-2-2他两个人一共去过那些地方 即 求 并集 格式: {}|{}
print(zhangsan|lisi)
# 1-2-3张三去过李四没有去过的地方即 求 差集 格式: {}-{}
print(zhangsan - lisi)

增删改查

# 1-3创建set集合 新增数据  s.add(...)
s = set()  #如果是s={}则默认为创建的是一个字典
s.add('张无忌')
print(s)
# 1-4set删除 s.remove('item')
s = {'长白山', '三亚', '克拉玛依', '纳木错'}
s.remove('长白山')
print(s)
# 1-5set集合修改 相当于 删除不要的 再加上新的
# 把长白山 替换 成 泰山
s = {'长白山', '三亚', '克拉玛依', '纳木错'}
s.remove('长白山')
s.add('泰山')
print(s)
# 1-6set集合没有顺序 所以没有索引 但是可以for循环
for item in s:
    print(item)

10 补充

is 与 ==

# 2-1 is 和 ==的区别
a = [10, 20, 30]
b = [10, 20, 30]
print(a == b)  #True 判断两个内容的值是否一致
print(a is b)  #False 判断两个内容的内存地址是否一致
print(id(a))   #打印a的内存地址 1629029612928
print(id(b))   #打印b的内存地址 1629029721024
# 2-2 一般用is 或 not is来判空
c = None
if c is None:
    print('空')
else:
    print('非空')

while 补充 else

# 3-1 while else是一个整体
i = 1
while i <= 10:
    print(i)
    i +=1
else:
    print('打印结束')
# 3-2 break与else  如果没有break 一定会执行else;如果有break 就一定不会执行else
i = 1
while i <= 10:
    if i == 7:
        break
    print(i)
    i += 1
else:
    print('打印结束')
# 3-3 让用户随便输入一个数字 判断这个数字是不是质数
a = int(input('请输入数字:').strip())
b = 2
while b < a:
    if a % b == 0:
        print('和数')
        break
    b += 1
else:
    print('质数')

11 文件操作

文件路径

f表示文件句柄,负责操纵你打开的这个文件
路径 分绝对路径 和相对路径 ,相对路径用的多
./表示当前目录
…/表示退出一层
‘…/a/b/路径.txt’ …/ 先从py文件操作目录退出, a/ 进入目录a, b/进入目录b,

f = open('../a/b/路径.txt', 'r', encoding='utf-8')
print(f.read())  #read()读取全部内容

'r’只读模式

# 2-1 'r'只读模式
f = open('123.txt', 'r', encoding='utf-8')
print(f.read())   # 2-1-1read() 读取全部内容  内存容易炸
print(f.read(2))    # 2-1-2 read(2)读2个字符 可以指定读多少个字符
print(f.readline())   # 2-2-3 readline() 一次读一行
print(f.readline())
# 2-1-3for循环(重点)读取文件  每次循环读取一行内容!
for line in f:
    print(line.strip())
# 2-1-4 前面一行单独读取 后面内容用for循环
frist = f.readline()
print(frist.strip())
for line in f:
    print(line.strip())

‘w’:write只写模式

f = open('a.txt', 'w', encoding='utf-8') # 如果原来没有a.txt,就会创建一个,如果原来有,就会重新创建一个,老的会被替换掉
f.write('周杰伦')   # 写一行
f.write('\n')      # 换行

‘a’: append追加写

# 2-3 'a': append追加写 如果文件不存在 就创建一个,如果存在 就在文件最后追加写入内容
f = open('123.txt', 'a', encoding='utf-8')
f.write('大家过得都不错')

b: bytes 二进制

# 2-4 b: bytes 二进制 一般处理非文字文件 不能指定encoding
# rb:读取字节
# wb:写入字节   rb和 wb 可以完成文件的复制操作  当要操作的文件不知道是什么类型是 用rb wb模式
# ab:追加写入字节
# 复制一张图片 把a/b/tu1.jpg 复制到 文件操作 目录下
f1 = open('a/b/tu1.jpg', 'rb')
f2 = open('文件操作/tu2.jpg', 'wb')
# f2.write(f1.read())   # 直接全部读取写入
for line in f1:         # 一行一行的读取写入
    f2.write(line)

+:扩展

+:扩展 尽量不要用 但是要知道这是文件操作的什么模式
r+: 读写; w+: 写读; a+: 追加写和读; r+b,w+b,a+b

f.close()

文件操作的另一种写法 打开文件 操作完成后 要追写一段 f.close() 否则文件将会被程序持续占用
下面这种写法不用写f.close() 在结束后会自动结束文件

# 2-6-1读取123.txt里面的内容
with open('123.txt', 'r', encoding='utf-8') as f:
    for line in f:
        print(line.strip())
# 2-6-2 把123.txt内容复制到456.txt里面
with open('123.txt', 'r', encoding='utf-8') as f, \
        open('456.txt', 'w', encoding='utf-8') as f1:
    f1.write(f.read())

练习

# 2-7-1-1 把123.txt中的 ’好‘ 都改成’坏‘
"""
读取文件内容
把要修改的内容进行修改
把新内容写入到另一个副本文件中

把原来文件删掉
把新文件重命名为原来的文件名
"""
import os
with open('123.txt', 'r', encoding='utf-8') as f, \
        open('123_副本.txt', 'w', encoding='utf-8') as f1:
    for line in f:
        if '好' in line:
            line = line.replace('好', '坏')  # 字符串要重新赋值
        f1.write(line)
os.remove('123.txt')
os.rename('123_副本.txt', '123.txt')    # 文件重命名os.rename(旧, 新)
# 2-7-1-2 读取规则文件  把a.txt中的数据更改为 列表里面套字典模式
f = open('a.txt', 'r', encoding='utf-8')
head_str = f.readline()
head_lst = head_str.split()  # split()无参数 相当于用空白切割 得到一个列表
tasks = []
for line in f:
    d = {}
    line = line.strip()
    line_lst = line.split()
    for i in range(len(head_lst)):
        d[head_lst[i]] = line_lst[i]
    tasks.append(d)
# print(tasks)
f.close()
f1 = open('b.txt', 'w', encoding='utf-8')
f1.write(str(tasks))     # 把列表转成字符串存储
f1.close()
# a.txt
序号  部门  人数  平均年龄    备注
1   python 18     26       单身多
2   研发    20    36       工资高
3   销售    30    23       女生多
# b.txt
[{'序号': '1', '部门': 'python', '人数': '18', '平均年龄': '26', '备注': '单身多'}, {'序号': '2', '部门': '研发', '人数': '20', '平均年龄': '36', '备注': '工资高'}, {'序号': '3', '部门': '销售', '人数': '30', '平均年龄': '23', '备注': '女生多'}]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值