Python基础(2)——字典、元祖、字符串方法、非空即真、文件
目录:
一、字典
二、元祖
三、字符串方法、切片
四、非空即真,非0即真
五、文件
正文
一、字典
字典
d = {
'username':'xiaohei',
'id':1,
'grand':'天马座',
'addr':'北京',
'age':29
}
1、增加
d = { 'username':'xiaohei', 'id':1, 'grand':'天马座', 'addr':'北京', 'age':29 } #增:2个方法 d['money'] = 500 d.setdefault('car','bmw') print(d) d['username'] = 123 #重复key,value覆盖 d.setdefault('grand','bmw') #存在key,value无效 print(d)

2、查询
d = { 'username':'xiaohei', 'id':1, 'grand':'天马座', 'addr':'北京', 'age':29 } #取值:2个方法 print(d['addr']) print(d.get('username')) print(d)
# print(d['addrs']) #不存在的key报错 print(d.get('usernames')) #不存在的key返回None print(d.get('sex','男')) #get取不存在的key返回默认值

3、删除
#删除 print(d) d.pop('username') del d['addr'] print(d)

4、其他方法
1)取出字典所有key到一个list中
取出字典所有values到一个list中
print(d.keys())#取出字典所有key到一个list中 print(d.values())#取出字典所有values到一个list中

2)向字典里更新值
d = { 'username':'xiaohei', 'id':1, 'grand':'天马座', 'addr':'北京', 'age':29 } d.update(a=1,b=2)#向字典里更新值 print(d)

3)清空clear()
d.clear()#清空 print(d)

4)判断key是否存在
users = { 'fd':'123456', 'xzh':'45678' } username = 'fd' # 判断key是否存在 print(username in users.keys()) print(username in users) #判断key是否存在,比keys()少一步转成list #users.has_key(username)#python2

5)取key和value值
#直接取到key和value print("转成二维数组后取") print(d.items()) # 转成二维数组 for k,v in d.items(): print(k,v) print("") print("根据key取:")#性能好 for k in d: print(k,d.get(k))

练习:录入学生
users = { 'fd':'1234', 'lhy':'456' } for i in range(3): username = input('username:').strip() password = input('password:').strip() cpwd=input('cpwd:').strip() if username=='' or password=='' or cpwd=='': print("不能为空") elif password!=cpwd: print("两次输入不一致") else: users[username]=password print("注册成功") print(users) break else: print('输入错误次数过多')

5、list字典嵌套
info = { 'lgy':{ 'age':18, 'addr':'beijing', 'car':['bmw','ben-z','audi'], }, 'fd':{ 'house':{ 'bj':['海淀区','昌平区','朝阳区','西城区'], 'sh':['静安区','闸北区'] }, 'money':5000 } }
#lgy买了一辆五菱宏光
#fd卖了北京昌平的房子钱增加了400 0000
info['lgy']['car'].append("五菱宏光") info['fd']['house']['bj'].remove('昌平区') info['fd']['money']+=4000000 print(info)

#fd在重庆江北区买了房子
#info['fd']['house']['cq']=['江北区'] #info['fd']['house'].update(cq=['江北区']) info['fd']['house'].setdefault('cq',['江北区']) print(info)
{'lgy': {'age': 18, 'addr': 'beijing', 'car': ['bmw', 'ben-z', 'audi', '五菱宏光']}, 'fd': {'house': {'bj': ['海淀区', '朝阳区', '西城区'], 'sh': ['静安区', '闸北区'], 'cq': ['江北区']}, 'money': 4005000}}
二、元祖
l = (1,2,3,4,5)
元祖是不可变的列表
元祖一旦被创建,不能改变里面的值
只有2个方法
li = ('118.24.3.40','root','123456','3306') #只有2个方法 print(li.index('root')) print(li.count('root'))

备注:只有一个元素的元祖要加逗号
t = ('abc') #只有一个元素不是元祖 m = ('abc',) #只有一个元素的元祖加逗号 print(t,type(t)) print(m,type(m))

三、字符串
1、index
find
s = 'abca' #s.index() 找字符串下标(找不到会报错) # s.find() (找不到返回-1) print("找字符串下标") print(s.index('a')) print(s.find('a')) print(s.index('a',2)) #从第二个开始找, print(s.index('a',0,10)) #找前10个, print(s.find('a',2))

2、s.strip() 去空格
#s.strip() 去空格 print("去空格、换行符或指定字符串") s = ' abca,' print(s.strip()) print(s.rstrip()) #去右边空格 print(s.lstrip())#去左边空格 print(s.strip(',')) s = ' abcad你好\n' print(s) print(s.strip()) #去换行符 print(s)

3、s.replace()替换
print("替换replace") s = 'abcasffsfds' print(s.replace('a','A'))#把小a用大A代替
#敏感词打码
word_list = ['傻逼','傻b','煞比','sb'] content = input("请输入") for word in word_list: content = content.replace(word,'**') print(content)

4、lower() upper() 大写、小写转换
s = 'ABCabc' print(s.lower()) print(s.upper())

5、zfill() 补0
#s.zfill() 补0 s='1' if len(s)<3: if len(s)==1: s='00'+s elif len(s)==2: s='0'+s else: s='0' print(s)
print(s.zfill(5))

6、
# s.isdigit() 判断是否输入为纯数字,自然数
# s.endswith() 以...结尾
# s.startswith()以...开头
s='1.23' print(s.isdigit()) print(s.endswith('.py')) print(s.startswith('1.'))

7、center() 使用字符使内容居中
# s.center() print('欢迎登陆'.center(50,'1')) #用1字符凑够50个字符,输入内容居中

8、title() 将字符串变每个单词首字母大写
print('my car'.title())

9、isspace() 判断输入的字符串中是全是空格
# s.isspace() print(' '.isspace())#判断输入的字符串中是全是空格

10、 s.isupper() s.islower() 判断是否全为大写/小写
# s.isupper() 判断是否全为大写 # s.islower() 判断是否全为小写 print('my car'.islower())

11、capitalize() 首字母大写
#capitalize() print('my car'.capitalize()) #首字母大写

12、s.split()分割字符串
入参空默认按着空格和换行符分割字符串
s=''' aa bb cc dd ''' print(s.split()) s = 'aaa,bbb,ccc,ddd' print(s.split(',')) print(s.split('z')) #没有该分割符,则把所有字符串放到一个list中

13、s.join() 连接list里的每个元素的
l = ['aa','bb','cc','dd'] s =' '.join(l) print(l) print(type(l)) #将原来的list变为字符串

14、切片
切片是list范围取值的一种方式
import string print(string.ascii_lowercase) #所有小写 print(string.ascii_uppercase) print(string.digits) #所有数字 print(string.ascii_letters) #所有字母 print(string.punctuation) #所有符号

list切片
l=['a','b','c','d','e','f','g','h','i'] print(l[0:2])#切片,从0开始到第二个2结束 顾头不顾尾 print(l[2:])#从第二个开始到末尾 print(l[:3])#取到前3个 print(l[:])#取所有元素 print(l[0:9:2])#第三个参数:步长 0,0+2,2+2,4+2,6+2 #l=['a','b','c','d','e','f','g','h','i'] # 0 1 2 3 4 5 6 7 8

步长为负数
print(l[::-1])#如果步长为负数,取值从右往左开始取,同时,开始和结束下标也要写成负数 #l=['a','b','c','d','e','f','g','h','i'] # -9 -8 -7 -6 -5 -4 -2 -2 -1 #i--f print(l[-1:-4:-1])

字符串切片
s='abcdef' print(s[::-1]) #只要有下标的都可以,包括list字符串元祖

15、list与循环语句
# print(list(range(1,5))) #[1, 2, 3, 4] # 0 1 2 3 4 5 6 7 8 9 10 l = [0, 1, 2, 2, 3, 4, 5, 6, 7, 8, 9] for i in l: if i%2 == 0: l.remove(i) print(l) #循环删除会导致下标错乱[1, 2, 3, 5, 7, 9] #修改为 l = [0, 1, 2, 2, 3, 4, 5, 6, 7, 8, 9] l2=[0, 1, 2, 2, 3, 4, 5, 6, 7, 8, 9] for i in l2: if i%2 == 0: l.remove(i) print(l)

为什么不能直接给l2赋值l

#浅拷贝/深拷贝 l = [0, 1, 2, 2, 3, 4, 5, 6, 7, 8, 9] l2=l#浅拷贝 print(id(l)) print(id(l2)) #/深拷贝 import copy l = [0, 1, 2, 2, 3, 4, 5, 6, 7, 8, 9] l2=copy.deepcopy(l) print(id(l)) print(id(l2))

#以下虽然内存地址不是同一个但也是浅拷贝 l = [1,2,3,[1,2,3]] l3=l.copy() #嵌套的也会随l改变而变化 l4=copy.copy(l) l5=l[:] l[-1].append('abc') print(l) print(l3) print(l4) print(l5)

四、非空即真 非0即真
#非空即真,非0即真
#None {} () [] ''
username=input("username:") password=input('password:') if username.strip(): #不为空 if not username.strip(): #为空 print('你输入的不为空') else: print('username不能为空')

d={'a':1}
if d:
print("真,d不为空")

五、文件


1、只读
f = open('a.txt','r') #三种模式 w r a(附加模式) 默认读模式 # f = open('a.txt','r',encoding='utf-8') #有中文 result = f.read() #字符串 print(result) f.close()

2、文件中有中文
f.readlines()、f.readline()
f = open('a.txt','r',encoding='utf-8') #有中文 result = f.readlines() #列表 f.seek(0) result2 = f.readline() #一行 print(result) print("result2:"+result2) f.close()

3、只写
#w只写 f = open('a.txt','w',encoding='utf-8') f.write('nihao') #只能是字符串 names =['\nfd','lhy','wq'] new_name='\n'.join(names) f.writelines(new_name) #可以循环写,只能是string类型 f.close()
#备注: #写整数型需要转化成字符型写入 numbers=[1,2,3,4,5,6] for index in range(len(numbers)): numbers[index]=str(numbers[index]) print(numbers)

4、附加模式
#附加模式 f = open('a.txt','a',encoding='utf-8') # result = f.read() 不能读 names =['fd','lhy','wq'] f.writelines(names) f.close()

5、读写
#r+ w+ a+ 三种模式 #r+读写模式 #r r+打开不存在的文件都会报错 f = open('a.txt','r+',encoding='utf-8') result = f.read() print(result) names =['fd','lhy','wq'] f.writelines(names) print("readlines",f.readlines()) #有文件指针读完后指针已经到最后,不能读第二次 f.close()

6、a+
a+模式默认总最后附加写,如何写在文件开头
方法1:先a+打开再w打开重新写
#写在开头 f = open('a.txt','a+',encoding='utf-8') f.seek(0) result = f.read() new_content = 'ksitou'+result f.close() f = open('a.txt','w',encoding='utf-8') f.write(new_content) f.close()

方法2
f.truncate()#清空文件内容
f = open('a.txt','a+',encoding='utf-8') f.seek(0) result = f.read() f.seek(0) new_result = result.upper()#将原文件内容改为大写 f.truncate()#清空文件内容 f.write(new_result) f.close()

#

浙公网安备 33010602011771号