本章小结
学习越往后越意识到总结的重要性
特别是语法基础,东西太多
不用是真的会直接忘掉
我在总结本文的时候就发现
我当时觉得学得很好很扎实
自信不会忘记的东西,
真的已经被我忘掉了
还不得不依靠百度来解决问题
这坚定了我更新的决心
fighting~
首先放上自己的作业:
README
这是一个模拟商城的程序,程序有两个端口,分别为商家端和用户端。
>>商家端<<
可以上架商品,修改已经上架商品的属性,在用户登录的时候可以查看各项属性并购买。
>>用户端<<
首次登录会进行注册,然后需要输入一个余额以及密码,之后可以查看商品价格和其他属性,支付购买后放入购物车。用户信息如购物车内的商品等写入了一个json文件(当时还没讲这个模块,废了很大劲才搞懂),再次登录时验证注册时的密码,并且其他信息如上次购买后的余额,以及购买的商品仍然保存,可以查看和继续购买。
>>商户端<<
>>首次登录<<
>>非首次登录<<
首次写这么长代码的脚本着实很费力,
不过写完之后就很开心,所以就这个无聊的脚本
我都玩了很久hin久hhhhhhhh
命令汇总,供查阅
文档处理命令:
.read() #读取
.write(‘写入内容’) #写入
.readlines() #将其转化为列表,列表的每一个元素为文本的一行
.readline() #读取一行
.strip() #去空格换行
.flush() # 强制刷新
.close() #关闭打开的文档
.center(50,'-') #格式化工具
.tell() #指明句柄指针的位置
.seek() #让指针回到某个位置,括号里面放值
集合命令:
set() #将列表转化为集合
.intersection() #求交集 ‘&’
.union() #求并集 ‘|’
.difference() #求差集 ‘-’
.isdisjoint() #是否有交集
.issubset() #是否为子集
.issuperset() #是否为父集
.symmetric_difference() #求对称集合 ‘^’
.add() #集合增加一项,括号放元素
.uppdate() #可以增加多项
.remove() #删除一项
len() #求长度,括号中放集合名
冷知识1:
sys.stdout.write('#') #系统的一种标准输出方式,不会自动换行,可以用来制作进度条,print()会自动换行
sys.stdout.flush()
冷知识2:
一行代码太长可以使用‘,\’逗号短斜杠的方式来换行
使用with open(’路径\文件名’)as file: #执行完会自动关闭文档
冷知识3:
*args 接受位置参数,转化成列表
**args 字典参数
编码知识:
ASCII
首先出现,不能存中文,到后来,英文特殊字符均占一个字节,八位
GB2312
存七千多汉字
GB18030
两万多汉字
GBK
现在中文使用的编码,各个国家都有自己的GB,导致乱码
Unicode
万国码,存中文字符英文字符都是两个字节,十六位,导致浪费空间
utf-8
英文字符是一个字节,中文三个字节
python的默认编码是utf-8,文件头的作用是说文件编码是什么编码
# -*- coding:utf-8 -*- #指定编码
下面是一些实例:
集合:
list_1=[1,3,4,5,4,2,3,]
list_1=set(list_1) #列表转集合
print(list_1,type(list_1)) #查看数据类型
list2=set([1,3,6,])
求交集 &
print(list_1.intersection(list2))
求并集 \
print(list_1.union(list2))
差集 -
print(list_1.difference(list2)) #在集合1但不在集合2
求是否有交集合
print(list_1.isdisjoint(list2))
求对称集合 ^
print(list_1.symmetric_difference(list2))
.issubset(),.issuperset() #是否为子集,父集
集合增,增加一项
list_1.add(9)
集合增,增加多项
list_1.update([99,45,22])
集合删一项
list_1.remove(5)
求长度
print(len(list_1))
文档处理:
f=open('文件名','r',encoding='utf-8') #文件句柄,也就是文件的内存对象。以可读(也就是可取用)的模式打开文件
其他模式为:
‘w’ 以写的模式打开文件,写的时候要注意源文件可能会被覆盖的问题
‘a’ 以追加的模式打开文件
‘a+’ 以追加写读的模式打开文件
‘w+’ 以写读的模式打开文件
‘r+’ 以读写的模式打开文件
f=open('学习笔记','r',encoding='utf-8')
for line in f.readlines():
print(line.strip()) #.strip是去空格
输出结果为:将整个文档打印出来
f=open('学习笔记','r',encoding='utf-8')
flag=f.tell() #指明指针的位置
print(f.readline())
f.seek(flag) #让指针回到指定的位置
print(f.readline()) #回到了第一行
f=open('学习笔记','r',encoding='utf-8')
flag=f.tell() #指明指针的位置
print(f.readline()) #只打印一行
f.seek(flag) #让指针回到指定的位置
print(f.readlines()) #转化为以行为元素的列表
制作简易进度条的代码:
import sys,time
for i in range(100):
sys.stdout.write('#') #不换行输出
sys.stdout.flush() #强制刷新
time.sleep(0.1) #暂停0.1s
函数:
定义函数
'''def test(x): # test函数名字,x 参数
"函数描述" #文档描述,可以不添加,但是强烈建议添加
x+=1 #代码块和程序处理逻辑
return x #定义返回值
'''
没有返回值的函数,python在调用过程的时候默认返回一个none
参数组的定义,当参数不确定的时候可以使用
*args 接受位置参数,转化成列表
def name(x,*args):
print(x)
字典参数**kwargs,一级key,value之间用等号连接,接受关键词参数,转化成字典
注意在函数内定义变量叫局部变量,局部变量在函数外不生效,即作用域在函数内,但是也可以强制改,在变量前声明 global。局部变量只限于整数和字符串,复杂一点的对象比如列表,字典,类等等都可以更改。
def name(**kwargs):
print(kwargs)
a=name(name2={'name':1})
print(a)
递归
函数在自己内部调用自己(最多递归999层)
递归特性:
1. 必须有一个明确的结束条件
2,每次进入更深一次递归时,问题规模相比上次递归都应该有所减少
3.递归效率不高,递归层数过多会导致栈的溢出
END