一、字典

Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:

f = {key1 : value1, key2 : value2 }

键必须是唯一的,但值则不必。

值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
print(d)

查看打印结果:可以看到字典里面的排序是无序的。

1、查看元素

如果我们要查看某个键值的值,把相应的键放入方括弧,字典没有下标,直接取key,例如:

d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
print(d)
print(d['name'])

执行查看结果:

还可以用get方法获取键值,例如:

d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
print(d)
print(d['name'])
print(d.get('name'))

差看执行结果:

当get的键值不存在的时候会返回默认值:

d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
print(d.get('weight'))

查看执行结果:

None

2、增加元素

    如果需要增加元素就直接在方括号中写入key名,然后写入相应的值,例如:

d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
d['phone']='13102011111111'
print(d)

查看执行结果,加入了phone:

setdefault()方法和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default值,我们看一下和get的区别:


d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
print(d.get('weight',120))
print(d)
t={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
print(t.setdefault('weight',130))
print(t)

查看执行结果:

120
{'age': 12, 'name': 'pei', 'money': 19000, 'sex': '女', 'addr': '昌平'}
130
{'age': 12, 'name': 'pei', 'sex': '女', 'addr': '昌平', 'money': 19000, 'weight': 130}

可以看到,get的key不存在的时候,只会返回默认值,不会添加到字典中,setdefault的可以不存在的场合,会返回默认值,并把key 添加到字典中,并默认值赋值;

3、修改元素

如果需要修改字典中的键值,同样也是在方括号中写入已有的key值,然后写入相应的值,例如:

d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
d['name']='yingfei'
print(d)

查看执行结果:

4、删除字典元素

如果只需删除一个元素,可以用del命令:

d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
del d['name']

查看执行结果:

{'addr': '昌平', 'money': 19000, 'sex': '女', 'age': 12}

如果需要清空字典表,用clear方法,例如:

d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
d.clear()
print(d)

查看执行结果:

{}

如果需要删除字典表,可以用del,例如:

d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
del d
print(d)

查看执行结果:

我们可以看到,d这个字典已经不存在了

和列表一样,还可以用pop()方法删除一个元素
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。

d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
d.pop('name')
print(d)

查看执行结果:

{'sex': '女', 'addr': '昌平', 'age': 12, 'money': 19000}

popitem()方法也可以用来删除,由于字典是无序的,所以popitem方法会随机删除字典中的一个元素,例如

d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
d.popitem()
print(d)

查看执行结果:

{'name': 'pei', 'age': 12, 'addr': '昌平', 'sex': '女'}

 5、字典的其他方法

keys以列表形式返回一个字典所有的键;

d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
print(d.keys())

执行结果:

dict_keys(['addr', 'name', 'sex', 'age', 'money'])

values,以列表返回字典中的所有值;

d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
print(d.values())

查看执行结果:

dict_values(['女', '昌平', 12, 'pei', 19000])

6、循环

我们对字典进行循环操作,看一下得到的结果:

d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
for k in d:
print(k)
for k in d:
print(k,d.get(k))
for k in d:
print(k,d[k])
for k,v in d.items():
print(k,v)
查看执行结果:
money
name
addr
sex
age
我直接对列表循环,我们得到的只有key;
要想得到key的value值,需要单独取获取; money 19000
name pei
addr 昌平
sex 女
age 12 money 19000
name pei
addr 昌平
sex 女
age 12
item方法,以列表返回可遍历的(键, 值) 元组数组,
money 19000
name pei
addr 昌平
sex 女
age 12

练习:

下面我们看一下列表与字典的实际应用,通常情况下,两者都是结合使用的。例如:

stus = {
'pei': {
'age': 18,
'sex': '男',
'addr': '昌平区',
'money': 10000000,
'jinku': {
'建行卡': 80000,
'工商卡': 800000,
'招商卡': 8000000
}
},
'li': {
'age': 19,
'sex': '女',
'addr': '昌平区',
'money': 10000000,
'huazhuangpin': ['chanle','haha']
},
'wang': {
'age': 19,
'sex': '女',
'addr': '昌平区',
'money': 10000000,
"bag": {
'lv': '一车',
'鳄鱼':10
}
},
}

以上,

1.我们要取到‘pei’的招商卡的金额:

print(stus['pei']['jinku']['招商卡'])
查看执行结果:8000000

2.我们要取到‘li’的化妆品种类

print(stus['li']['huazhuangpin'])
查看执行结果:['chanle', 'haha']

3.我们查看‘wang’的bag的种类:

print(stus['wang']['bag'].keys())

查看执行结果:dict_keys(['lv', '鳄鱼'])

4.如果我们查‘wang’的bag的总数量呢:

我们可以直接使用内置的函数sum(),如下:

print(sum(stus['wang']['bag'].values()))

查看执行结果:100

还可以用相加的方法:

ls=stus['wang']['bag'].values()
sum=0
for i in ls:
sum=sum+i
print(sum)

查看执行结果:100

再来做一个小实验:

#####################################################

#用户注册:存入字典表中,注册时进行非空验证,,验证密码和确认密码是否一致,已经存在的不能重复注册


user={}
while True:
username=input('请输入您的账号:').strip()
passwd=input('请输入您的密码:').strip()
cpasswd=input('请确认您的密码:').strip()
if username and passwd:
if username in user:
print('用户已经存在,请重新输入!') else:
if passwd==cpasswd:
print('恭喜您,注册成功!')
user[username]=passwd
break
else:
print('两次密码不一致,请重新输入!') else:
print('用户名或密码不能为空!请重新输入。') while True:
usr=input('请输入您的账号:').strip()
pwd=input('请输入您的密码:').strip()
if usr and pwd :
if usr in user:
if pwd==user[usr]:
print('恭喜您登陆成功!')
break
else:
print('密码不正确,请重新登陆!')
else:
print('用户名密码不存在,请重新登陆!')
else:
print('用户名或密码不能为空,请重新登陆')
 

大家执行一下看一下结果吧~

元组

Python的元组与列表类似,不同之处在于元组的元素不能修改。

元组使用小括号,列表使用方括号。元组与字符串类似,下标索引从0开始,可以进行截取,组合等。

1、创建

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

如下:

a=(1)
b=('111','222','333')#元祖也是list,只不过不能变
print(a)
print(b)

执行查看结果:

1
('111', '222', '333')

2、修改元组

元组中的元素值是不允许修改的:

b=('111','222','333')
print(b)
b[0]=12
print(b[0])

我们执行看一下,看到执行的结果报错了。

TypeError: 'tuple' object does not support item assignment

#可变变量:创建后可以修改
#不可变变量:一旦创建后,不能修改,如果修改只能重新定义,例如元祖和字符串

mysql2=('182.168.55.14',8080,'pei','123456')#不可变,防止被修改
print(mysql2.count('m'))#统计次数
print(mysql2.index('pei'))#下标位置

查看执行结果:

0
2

3、切片

元组的切片与列表切片类似,用:进行分割



b=('111','222','333','444')
print(b[0:5:2])

查看执行结果:

('111', '333')

我们来做个小程序:

如果列表中的数除2取余数不为0的,则从列表中删除:

li=[1,1,2,3,4,5,6,7,8,9]
for i in li:
if i%2!=0:
li.remove(i)
print(li)

运行以上程序,查看结果:

[1, 2, 4, 6, 8]

我们看到以上程序【1】没有被删除,那是因为我们直接修改了列表,进行了删除操作,当遇到第一个1时,进行了删除,列表变为[1,2,3,4,5,6,7,8,9],此时循环的角标变为1,取到的是2,略过了[1];

所以循环list的时候不能删除列表中的数据,角标会进行变化;

这个时候我们就需要拷贝一份新的列表进行循环:

li=[1,1,2,3,4,5,6,7,8,9]
li2=li[:]#深拷贝,内存地址会变
li3=li#浅拷贝,内存地址不变
print(li2)
print(li3)
print(id(li))
print(id(li2))
print(id(li3))
for i in li2:
if i%2!=0:
li.remove(i)
print(li)

查看执行结果:
[1, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 1, 2, 3, 4, 5, 6, 7, 8, 9]
13995656
13967944
13995656
[2, 4, 6, 8]

我们看到了,通过切片拷贝的内容和直接赋值的内容是一样的,但地址是不一样的。

我们叫做深拷贝和浅拷贝,深拷贝的时候删除原有列表的数据,不影响拷贝的列表。

字符串方法

下面列举字符串常用的方法


name='   {a}     besttest    best   '
name1='a besttest best'
name2=' a besttest best\n'
name3='a.txt'
name4=' A B C D, E F G '
name5='1234567677'
print(name.strip())#默认去掉首尾的空格和换行
print(name)
print(name1.rstrip('best'))#去掉右边指定的字符
print(name1.rstrip('t'))#去掉右边指定的字符
print(name1.lstrip('a'))#去掉左边指定的字符
print(name2.rstrip())#去掉右边的空格和换行
print(name2)
print(name.count('e'))#计数
print(name.index('a'))#查找角标
print(name.replace('e','E'))#替换
print(name.format(a='test'))#格式化
print(name1.capitalize())#首字母大写
print(name1.center(30,'$'))#居中
print(name3.endswith('t'))#判断是以什么结尾的
print(name3.startswith('e'))#判断是以什么开头的
print(name1.expandtabs(16))
print(name1.find('w'))#找不到的时候会返回-1
print(name1.index('b'))#找不到的时候会报错
print(name1.upper())#把所有的小写字母变大写
print(name4.lower())#把所有的大写字母变小写
f={'name':'wang','age':13}
d='{name}欢迎,his age is {age}'
print(d.format_map(f))#字符串格式化,传进去的是字典
print(name.isdigit())#判断是否是数字
print(name.islower())#判断是否全是小写
print(name.isupper())#判断是否全是大写
print(name5.isalnum())#判断是否全是数字
print(name5.isalpha())#判断是否全是字母
print(name4.split())#分个字符串,默认以空格进行分割
print(name4.split(','))#以指定符号分割字符串
list=['a','b','c','d','e']
print('$'.join(list))#以指定字符链接列表中的字符串
s='asdasd asdasd asd asd asdasd a'
print('0'.join(s))#链接字符串的的元素
list2=['a','b','c','d',1,2,3,4,5]
#print('*'.join(list2))#int类型的不能进行拼接
大家可以自己试一下~

文件读写
##################################################
#文件读写
#读 r 打开文件没有指定模式,那么默认是读;r权限不能进行写文件操作,r+模式是读写模式,会追加写入的内容;r,r+文件不存在的时候会报错
#写 w w模式会清空原文件,w只能写,不能读; w+ 写读模式,会清空文件内容
#追加 a a+追加读写都可以,文件不存在的时候,会创建文件 file=open('test3','a+')#报GDK的错误,添加utf-8,打开文件
# file.write('hehe呵呵\n')
# print(file.readlines())#读取文件的所有内容,并把内容写成list格式
# file.seek(0)#读操作以后,指针位置在末尾,再读就不会读出来
# print(file.readline())#读一行
st=['a','b','c','d']
#file.write(st)#write不能写入list,只能写入字符串
file.writelines(st)#写入一个可迭代的元素
file.seek(0)
#print(file.readlines())#
print(file.read())#已经读过一次,会自动识别已经读过的数据
# for i in file:
# print(i)
file.close()#关闭文件

#####################################################3
#高效读文件的方法
#
fw=open('test2',encoding='utf-8')
count=1
for f in fw:
f=f.strip()
stu_lst=f.split(',')
print(stu_lst)
#直接循环文件对象的话,循环文件里面的每一行 # fw.close()

python自动化测试学习笔记-2-字典、元组、字符串方法的更多相关文章

  1. python自动化测试学习笔记-4内置函数,处理json

    函数.全局变量 写代码时注意的几点事项: 1.一般写代码的时候尽量少用或不用全局变量,首先全局变量不安全,大家协作的情况下,代码公用容易被篡改,其次全局变量会一直占用系统内容. 2.函数里如果有多个r ...

  2. JavaScript学习笔记(1)字符串方法

    字符串方法 length 属性返回字符串的长度 var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var sln = txt.length; inde ...

  3. python自动化测试学习笔记-1

    一.什么是自动化 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程.直白的就是为了节省人力.时间或硬件资源,提高测试效率,便引入了通过软件或程序自动化执行测试用例进行测试: 二.python ...

  4. python自动化测试学习笔记-10YAML

    之前学习的编写测试用例的方法,都是从excel中编写接口的测试用例,然后通过读取excel文件进行接口自动化测试,这种方式我们叫做数据驱动的方式,由于excel操作起来不灵活,无法实现关联关系的接口测 ...

  5. python自动化测试学习笔记-5常用模块

    上一次学习了os模块,sys模块,json模块,random模块,string模块,time模块,hashlib模块,今天继续学习以下的常用模块: 1.datetime模块 2.pymysql模块(3 ...

  6. python自动化测试学习笔记-9测试框架

    学习了这么久的python,我们已经可以自己搭建一个简单的测试和框架了,先从简单的开始,有时我们编写接口的测试用例会用excel进行编写,以下面的接口测试用例模板为例,进行编写:

  7. python自动化测试学习笔记-6urllib模块&request模块

    python3的urllib 模块提供了获取页面的功能. urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capat ...

  8. python自动化测试学习笔记-4常用模块

    常用模块 1.os 2.sys 3.random 4.string 5.time 6.hashlib 一.os模块 os模块主要用来操作文件.目录,与操作系统无关.要使用os模块首先要导入OS模块,用 ...

  9. python基础学习笔记——列表及元组

    列表 列表的介绍  列表是python的基础数据类型之一 ,其他编程语言也有类似的数据类型. 列表的索引和切片 列表和字符串一样也拥有索引: lst = ['刘德华','周润发','周杰伦','向华强 ...

随机推荐

  1. 修改虚拟机中Linux的IP

    联网:ifup eth0 查看ip:ifconfig 点击编辑,选择NAT,子网ip修改第三字段为25,确定,重启linux后,会自动分配字段为25的ip 或者,也可以修改为自己想要的ip,如图:进入 ...

  2. buf.writeUInt32BE()

    buf.writeUInt32BE(value, offset[, noAssert]) buf.writeUInt32LE(value, offset[, noAssert]) value {Num ...

  3. git命令大杂烩

    查看版本库中的文件: git ls-files添加到暂存区: git add filesName|\folderName(循环递归) git add .(添加当前目录下的所有文件包括子目录,如果添加文 ...

  4. 【01】CSS3 Gradient 分为 linear-gradient(线性渐变)和 radial-gradient(径 向渐变)(转)

    CSS3 Gradient 分为 linear-gradient(线性渐变)和 radial-gradient(径 向渐变).而我们今天主要是针对线性渐变来剖析其具体的用法.为了更好的应用 CSS3 ...

  5. ceph 简介

    Ceph 存储集群 数据的存储 伸缩性和高可用性 CRUSH 简介 集群运行图 高可用监视器 高可用性认证 智能程序支撑超大规模 动态集群管理 关于存储池 PG 映射到 OSD 计算 PG ID 互联 ...

  6. git远程上传文件

    [第一步]建立先仓库 第一步的话看一般的提示就知道了,在github新建一个repository(谷歌可以解决),都是可视化的界面操作,所以难度不大.或者看这里:https://help.github ...

  7. Solidworks如何导入和使用模板文件

    将模板文件拷贝到Solidworks目录(可以是任意目录)     点击工具-选项-文件位置,然后把文件夹添加进去   新建文件的时候选择高级模式,然后就会看到已经出现了我们导入的模板文件       ...

  8. 【翻译自mos文章】注意: ASMB process exiting due to lack of ASM file activity

    注意: ASMB process exiting due to lack of ASM file activity 參考原文: NOTE: ASMB process exiting due to la ...

  9. jqury+css实现可弹出伸缩层

    1.使用可弹出伸缩窗调整了之前的页面布局,使用这样的布局使整个界面看起来更加清爽也更简洁 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L ...

  10. 数学之路-python计算实战(1)-ubuntu安装pypy

    Get the source code. The following packages contain the source at the same revision as the above bin ...