• python自动化测试学习笔记-2-字典、元组、字符串方法


    一、字典

    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 '
    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呵呵 ')
    # 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()
  • 相关阅读:
    java map集合的知识
    [JAVA_开课吧资源]第三周 常用类库、异常处理
    [SmartTV_Samsung]Samsung Smart TV 开发环境搭建
    [JAVA_源代码]如何在Eclipse sdk中查看源代码rt.jar
    [PPT_书]《Presentation Zen》
    [JAVA_开课吧资源]第二周 面向对象程序设计
    [Java_kaikeba]java中堆和栈的区别(对象变量的理解)
    [JAVA_开课吧资源]第一周 Java语言概述、Java语言基础
    [u/COS-II_安装]在PC机上的移植
    [IOS_HTML5]各种JS框架介绍--用HTML5/CSS3/JS开发Android/IOS应用
  • 原文地址:https://www.cnblogs.com/phoebes/p/8146016.html
Copyright © 2020-2023  润新知