Python基础三玄
一、可变类型和不可变类型
1.可变类型:
#在id不变的情况下,value可以变,则称为可变类型,如列表,字典
l1 = [1,2,3,4]
t1 = (1,2,3,4)
print(id(l1))
l1[1] = 33333333333333333333333
print(id(l1))
info = {'name':'张小三'}
print(id(info))
info['name'] = '李四'
print(id(info))
》》
36500304
36500304
6410768
6410768
》》
2. 不可变类型:
#value一旦改变,id也改变,则称为不可变类型(id变,意味着创建了新的内存空间)
如:整数,浮点数,字符串
# a = 10
# print(id(a))
# a = 100
# print(id(a))
其id前后不同
【引申】:
元组,集合
a = (1,2,3,4)
print(id(a))
b = (1,2,3,4)
print(id(b))
s1 = {1,2,3,4}
print(id(s1))
s2 = {1,2,3,4}
print(id(s2))
》》
7709728
7709872 #同值的变量id却不同
6223672
6223552
》》
但是添加字典的值,id可不变:
s1 = {1,2,3,4}
print(id(s1))
s1.add('a')
print(s1)
print(id(s1))
》》
6486056
{1, 2, 3, 4, 'a'}
6486056
》》
二:内置函数(len,in,not in)
1.len统计长度:
# a = {'name':'程泽宇', 'age':23}
# print(len(a))
2.In及not in
in :在....里面,有则true,无则false
# print('e' in 'hello')
not in :不在.....里面,没有则true,有则false
# print('e' not in 'hello')
三、基本运算符
四、比较运算符
五、赋值运算符
六、身份运算符
【is和==的区别】
#is是判断内存地址
#==是判断变量值
#一个内存地址可以对应多个变量,一个变量只能对应一个内存地址
a =10
b =10.0
print(a==b)
print(a is b)
print(id(a))
print(id(b))
》》
True
False
505359648
6504192
》》
七、流程控制if...else....
1.语法:
if 条件语句
执行的代码块
else:
执行的代码块
2.额外:
a = {}
# 当a为None,0,空 三种情况时为假,其余都为真
if a:
print('真')
else:
print('假')
》》
假
》》
八、逻辑运算符
练习:
#1.定义布尔型变量 has_ticket 表示是否有车票
#2.定义整形变量 knife_length 表示刀的长度,单位:厘米
#3.首先检查是否有车票,如果有,才允许进行安检
#4.安检时,需要检查刀的长度,判断是否超过20厘米
# 如果超过20厘米,提示刀子的长度,不允许上车
# 如果不超过20厘米,按键通过
#5.如果没有车票,不允许进门
ticket = input('请问您是否有车票:(1:有,2:无):')
if ticket=='1':
nife = input('您的随身刀具长度为:')
if nife <='20':
print('请上车,一路平安')
else:
print('刀具过长,请处理之后再上车')
else:
print('请购买车票再来')
九、流程控制之while
while 条件:
# 循环体
# 如果条件为真,那么循环体则执行,执行完毕后再次循环,重新判断条件。。。
# 如果条件为假,那么循环体不执行,循环终止
1. 打印0到4的数字
i = 0
while i < 5:
print(i)
i+=1
2.打印0到10之间的偶数
方案一:
i =0
while i <11:
print(i)
i+=2
方案二:
i =0
while i < 11:
if i % 2 == 0:
print(i)
i+=1
3.死循环
除了0,None,空这几个假量,其他的几乎都可以作死循环条件
如:
while 1:
print('循环到底')
4.while....else...
count = 0
while count <= 3 :
count += 1
print("hehe",count)
else:
print("循环已执行完")
》》
hehe 1
hehe 2
hehe 3
hehe 4
循环已执行完
》》
5.pass,continue,break使用
【continue跳过本次循环进入下一次循环】:
count = 0
while count <= 4 :
count += 1
if count==3:
continue
print("hehe",count)
》》
hehe 1
hehe 2
hehe 4
hehe 5
》》
【breck跳出整个循环体】
count = 0
while count <= 4 :
count += 1
if count==3:
break
print("hehe",count)
》》
hehe 1
hehe 2
》》
【pass是仅用来占位的,一般作补全语境用】
count = 0
while count <= 3 :
count += 1
if count==3:
pass #触发条件不作任何处理
print("hehe",count)
》》
hehe 1
hehe 2
hehe 3
hehe 4
》》
6.猜拳游戏
import random #‘import’:调用模块;‘random’:随机数
win =0
fault=0
balance=0
while True:
com = random.choice(['1', '2', '3']) # 1:石头,2:剪刀,3:布
print('——————欢迎来到猜拳大赛——————')
sum = input('请输入 ——1:石头,2:剪刀,3:布, 4:结束游戏 :')
print(com)
#赢
if (sum=='1'and com=='2') or (sum=='2'and com=='3') or (sum=='3' and com=='1'):
print('流弊,你赢了!')
win+=1
#败
elif (sum=='1'and com=='3') or (sum=='2'and com=='1') or (sum=='3'and com=='2'):
print('犹豫,就会败北!')
fault+=1
#平
elif (sum==com):
print('你瞅啥,平局!')
balance+=1
elif sum=='4':
print('胜:%s 败:%s 平:%s' %(win,fault,balance))
break
else:
print('请输入正确数字')
十.流程控制之for循环
1 迭代式循环:for,语法如下
for i in range(10):
缩进的代码块
【列出1至10间的奇数】
for i in range(1,10,2): #取1至10间,步长为2的数
print(i)
>>
1
3
5
7
9
>>
【例1】
a = {'name':'张小三','age':23}
for i in a:
print(i)
for i in a.items():
print(i)
for i,k in a.items():
print(i,k)
>>
name
age
('name', '张小三')
('age', 23)
name 张小三
age 23
>>
2 break与continue(同上while)
十一:文件
1.文件操作
在桌面上创建test.txt文本并写入值:
在python中打开此文件:
将文件的路径复制粘贴如下
file = open('C:UsersAdministratorDesktop est.txt','r',encoding='utf-8')
#open:打开文件,内接文件路径;
#后接‘r’或‘w’或‘a’,encoding='utf-8':表示以‘utf-8’转码来进行读或写或添加操作,有些电脑是‘gbk’转码
#或者直接接’rb’,’wb’,’ab’,分别表示:以二进制形式读,写,添加操作
#这里有一个报错,因为‘U’在Python里是有特殊含义的,需改正如下三种:
file = open('C:/Users/Administrator/Desktop/test.txt','r',encoding='utf-8') #将‘’变‘/’
file = open('C:\Users\Administrator\Desktop\test.txt','r',encoding='utf-8') #多加一个‘’
file = open(r'C:UsersAdministratorDesktop est.txt','r',encoding='utf-8') #在引号前面加一个‘r’,强烈推荐
#这里要注意字符编码,秉承一个原则就不会出现乱码(用什么方式写的,就用什么方式打开)
2.读‘r’及‘rb’:
正常分三步:
file = open(r'C:UsersAdministratorDesktop est.txt','r',encoding=utf-8) #打开文件
file.read() #读或写操作
f.close() #关闭文件,若不关闭,当查看文件过多时,会大量占用内存
总是关闭很繁琐,有简单的,在前面加‘with’即可自动关闭:
with open(r'C:UsersAdministratorDesktop est.txt','r',encoding='gbk') as f:
a=f.read()
print(a) #查看文件为原文件内容
当将‘r’改为‘rb’,查看的文件就是一堆字节码
with open(r'C:UsersAdministratorDesktop est.txt','rb') as f:
a=f.read()
print(a)
【拓展】
with open(r'C:UsersAdministratorDesktop est.txt','r',encoding='gbk') as f:
data = f.read(3) #只读3个字符
print(data)
data = f.readline() #读一整行
print(data)
》》
2介绍
之后的进行只对金额:
》》
data = f.readlines() #把内容转化成列表的形式
print(data)
for i in data:
print(i) #会以每行输出
# res = f.readable() #是否可读,判断为布尔类型
3.写。‘w’及‘wb’
在桌面新建一个空txt文件
with open(r'C:UsersAdministratorDesktop est1.txt','w',encoding='gbk') as f:
f.write('你好,世界网')
查看:
with open(r'C:UsersAdministratorDesktop est1.txt','wb',) as f:
f.write(b'holle,world') #需要加‘b’,来转码写入
# f.write(b'你好,中国') #这个报错是因为二进制只支持ASCII码,不支持中文
查看:
【note】:这个写操作会覆盖掉源文件内容
补:
# res = f.writable()#是否可写
4.追加:‘a’,‘ab’
‘a’和‘ab’的区别与读写类似
with open(r'C:UsersAdministratorDesktop est.txt','a',encoding='gbk') as f:
f.write('回手掏') #只追加在末尾而不覆盖
f.writelines(['最','后','一','行']) #把列表的元素添加到文档中
f.write('1111 222 ') #针对文本模式的写,需要自己写换行符
5.光标
f.seek(0,0) #等价于f.seek(0),代表把光标移动到开头
【注】seek只在字节上移动光标,不移字符
f.seek(2,1) #代表在相对位置移动2个字节(1代表光标的相对位置,2代表在相对位置上把光标向后移动2个字节)
f.seek(-3,2) #代表在末尾往前移动3个字节(2代表把光标移动到末尾,-3代表把光标向前移动3个字节)
f.read(3) #若是utf-8模式则代表读取3个字符,若是bites模式下则代表读取三个字节(意思是光标在第三个字节后面)
【光标位置移动】
#光标的移动模式 0:顶头 1:相对位置 2:末尾位置
#1和2只能在bytes(字节)模式下去运行,(0,1) (0,2)除外
#utf8中一个汉字3个字节,生僻字占的更多;gbk模式中一个汉字占2个字节。
# f.seek(3,0) #3代表字节
【例】
with open(r'C:UsersAdministratorDesktop est.txt','rb') as f:
f.seek(26,0)
a =f.read(4)
print(a.decode('gbk'))
f.seek(2,1)
a =f.read(6)
print(a.decode('gbk'))
f.seek(-4,2)
a =f.read(4)
print(a.decode('gbk'))
》》
pyth
的创始
一行
》》
————————————————————————————分割线——————————————————————————