zoukankan      html  css  js  c++  java
  • Python自动化学习笔记(三)——Python数据类型(list、dic)、字符串常用方法、读写文件

    1.Python数据类型

    1.1 list/数组/列表

    1.1.1 定义空list的两种方法:

    • goods=[]

    • goods=list()

    1.1.2 在list中增加元素,append、insert

    • goods.append('奶茶') #在list末尾增加一个元素
    • goods.insert(0,'火锅') #在指定位置增加元素
    • goods.insert(1,'串串') #在指定位置增加元素goods.insert(20,'蛋糕') #如果指定的下标不存在,则增加到末尾

    1.1.3 修改list中的元素

    • goods[i]=''     #i为要修改元素的下标

    1.1.4 删除list中元素,pop,del,remove,clear

    • goods.pop() #默认删除最后一个元素

    • goods.pop(-2) #删除指定位置的元素,需要传入下标
    • goods.remove('汉堡') #删除指定元素,传入元素值
    • del goods[-1] #删除指定位置的元素
    • goods.clear() #清空list

    1.1.5 查询

    • result=goods.count('奶茶') #查询某个元素在list中出现的次数
    • index=goods.index('奶茶') #查询元素在list中的下标,如果list里这个元素存在多次,返回第一次出现的下标

    1.1.6 其他常用方法

    • goods.reverse() #反转
    • nums.sort() #升序排序
    • nums.sort(reverse=True) #降序排序
    • nums.extend(goods) #把一个list里面元素添加到另一个list里

    1.1.7 遍历一个list

    • for s in stus: #获取到的s是list中的每一个元素
    • for i in range(len(stus)): #i是list的下标,len(l)表示获取list的长度
    • for index,stu in enumerate(stus): #index是下标,stu是元素
    • for index,stu in enumerate(stus,1): #从1开始显示下标

    1.1.8 数组切片

    切片,list取值的一种方式,指定范围取值,顾头不顾尾

    • stu[2:6] #截取stu[2]到stu[5]
    • stu0[:6] #如果前面的下标没写,代表从第一个元素开始取
    • stu0[2:] #如果后面的下标没写,代表取到最后一个元素
    • new_stu=stu0[:] #复制一个新的list
    • stu0[::2] #步长为2
    • stu0[::] #步长默认为1,stu0[::]等同于stu0
    • stu0[::-3]#步长为负数时从右往左取值

    下标、索引、切片同样适用于字符串

    字符串可以用下标取值,但不能修改

     1.2 dic/字典

    1.2.1定义一个空字典

    • stu_info={}

    1.2.2 向字典中增加/增加元素

    • stu_info['key']='value'    #若key-‘phone’已经存在,则会修改它对应的value
    • stu_info.setdefault('key','value')    #key已经存在时不会做出修改

    1.2.3 获取字典中的元素

    • print(stu_info['key'])   #key不存在时会报错
    • print(stu_info.get('key'))      #key不存在时不会报错,返回None
    • print(stu_info.get('key',500))      #key不存在时返回指定的默认值

    1.2.4 删除字典中的元素

    • stu_info.pop('key') #删除指定元素
    • del stu_info['key'] #删除指定元素
    • stu_info.popitem() #从字典中随机删除一个元素
    • stu_info.clear() #清空字典

    1.2.5 其他常用方法

    • d1.update(d2) #用字典d2更新字典d1
    • stu_info.keys()  #获取字典的key
    • print(stu_info.values())  #获取字典的value
    • 'name' in stu_info   #判断key是否在字典中,这种方法效率更高
    • 'name' in stu_info.keys()  #判断key是否在字典中,这种方法效率较低

     1.2.6 遍历一个字典

            两种循环方式,第一种效率更高

    • for k in stu_info  #k为字典的key,value用stu_info[k]来获取
    • for k,v in stu_info.items()   #k,v分别为字典的key和value

    2 字符串常用方法

    • new_s=s.strip() #默认去掉字符串两边的空格和换行符
    • new_s1=s1.strip('.') #去掉两边的指定的字符串
    • print(s.rstrip())
    • print(s.lstrip())
    • print(s1.count('.')) #获取某个字符串出现的次数
    • print(s.index('a')) #找某个字符串的下标
    • print(s.find('a')) #找某个字符串的下标,不存在的时候find方法返回-1,不会报错,index会报错
    • print(s.replace('abc','ABC',1)) #替换字符串,数字代表替换第几个
    • print(s.upper()) #变成大写字母
    • print(s.lower()) #变成小写字母
    • print(s.capitalize()) #首字母大写
    • print(s.startswith('p')) #判断是否以指定字符串开头
    • print(s.endswith('.jpg')) #判断是否以指定字符串结尾
    • print(s.islower()) #判断是否都是小写字母
    • print(s.isupper()) #判断是否都是大写字母
    • print(s.isdigit()) #判断是否为纯数字
    • print(s.center(50,'*')) #把字符串放到中间,不够的用指定字符补齐
    • print(s.isalpha()) #判断是不是都是字母或者汉字,不能有数字和特殊字符
    • print(s.isalnum()) #字符串里只要没有特殊字符就返回True
    • print(s.isidentifier()) #是不是一个合法的变量名
    • print(s.isspace()) #判断是不是空格
    • print(s.zfill(3)) #补0到指定的位数
    • print(s.split(',')) #按照某个字符分割
    • print(s1.split()) #默认按空格分割
    • res=','.join(cars) #以某个字符串把list中的字符串连接起来

     字符串格式化的两种方法,format和format_map

    s='insert into user VALUE ({username},{password},{addr},{email},{phone})'

    news=s.format(addr='北京',phone='12321',password='123456',email='37337@qq.com',username='niuhanyang')

    d = {'addr':'北京','username':'xiaohei','password':'12345','email':12,"phone":'sdfs'}

    s_map=s.format_map(d)

    3 读写文件

    3.1读文件

    f=open('users.txt',encoding='utf-8') #读文件的时候,必须存在才能读取,如果文件不存在,open()函数就会抛出一个IOError的错误
    res=f.read()
    f.close()  #文件使用完毕后必须关闭

    # print(f.readline())     #读取一行
    # print(f.readlines()) #读取文件里面所有的内容,把每行的内容放到一个list里面print(f.readline()) #读取一行的内容
    # for line in f          #直接循环文件对象,每次取的就是文件里的每一行 :

    3.2写文件

    fw=open('users',mode='w')  #'w'模式:如果没有这个文件,就创建一个;如果有,那么就会先把原文件的内容清空再写入新的东西
    fw.write('niuhanyang,123456 ')
    fw.close()

    3.3追加文件

    fa=open('users',mode='a')  #‘a’模式:如果没有这个文件,就创建一个;如果有,那么在原文件后面追加新的东西
    fa.write('qiaomeiling,123456 ')
    fa.close()

    3.4模式概览

    #r模式: 文件不存在时会报错,只能读不能写
    #w模式:文件不存在时会新建,只能写不能读,会清空原来的内容
    #a模式:文件不存在时会新建,只能写不能读,不会清空原来的内容
    #r+模式:文件不存在时会报错,能读能写
    #w+模式:文件不存在时会新建,能写能读(读不到内容,因为w先把文件清空了),会清空原来的内容
    #a+模式:文件不存在时会新建,能写能读(读不到内容,因为文件指针在末尾),不会清空原来的内容

    3.5高效读取文件的两种方法

    f=open('users') #文件对象,或者文件句柄
    d={}
    while 1:    #第一种,但是要求文件里不能有空行
        line= f.readline().strip()
        if line:
            user,passwd=line.split(',')
            d[user]=passwd
        else:
            break
    print(d)
    

      

    f=open('users') #文件对象,或者文件句柄
    
    #直接循环文件对象,每次取的就是文件里的每一行
    for line in f:
        print(type(line))
        print(line)
    f.close()
    

      

    4 作业-注册、登陆

    4.1 需求

    1、写注册的程序:

    username:
    password:
    cpassword:
    输入的账号必须是没有注册过的,两次密码必须输入一致,账号、密码的长度要在6 - 10之间,注册完成之后,存到文件里面

    2、登录,账号密码是从文件里面取的,如果输入的账号不存在要提示。登录的时候账号不区分大小写

    4.2代码

     1 import datetime
     2 
     3 def get_logininfo():                #从文件中读取登陆信息,返回一个字典
     4     #防止文件不存在的时候报错
     5     try:
     6         fr = open('users.txt', encoding='utf-8')  # 从文件中读取登陆信息,解析到列表users_info中存储
     7         users_info = fr.read().split('
    ')
     8         fr.close()
     9         login_info={}
    10     # 依次将文件中的name和password解析存储到字典login_info中
    11         for item in users_info:
    12             if item != '':
    13                 users = item.split(',')
    14                 name = users[0]
    15                 password = users[1]
    16                 login_info[name] = password
    17         return login_info
    18     except IOError:
    19         return {}
    20 
    21 def write(s):            #将传入的字符串追加至文件中
    22     fa = open('users.txt', encoding='utf-8', mode='a', )
    23     fa.write(s)
    24     fa.close()
    25 
    26 ispass = 0  # 标记是否操作完结
    27 while True:
    28     if ispass:
    29         break  # 操作完结则直接退出
    30 
    31     islogin = input("请选择是直接登录还是注册,登录输入1,注册输入0,退出系统输入-1
    ")
    32     count = 0
    33     if islogin == "1":  # 登录
    34         login_info=get_logininfo()
    35         while count < 3:  # 控制错误次数
    36             count += 1
    37             name_input = input("欢迎登录,请输入用户名:")
    38             password_input = input("请输入密码:")
    39             if name_input.strip() == "" or password_input.strip() == "":
    40                 print("用户名或密码为空,登录失败")  # 判断用户名和密码是否为空
    41             elif name_input.upper() in login_info:
    42                 if password_input == login_info[name_input.upper()]:  # 用户名正确时判断对应的密码是否一致
    43                     ispass = 1  # 登录成功,标记完结
    44                     print("登录成功")
    45                     print("欢迎%s,今天的日期是%s" % (name_input,datetime.datetime.today()))
    46                     break
    47                 else:
    48                         print("密码错误,登录失败")
    49                         continue
    50             else:
    51                 print("用户不存在,登录失败")
    52 
    53         else:
    54             print("错误次数达到上限")
    55             break
    56 
    57     elif islogin == "0":  # 注册
    58         while True:
    59             login_info = get_logininfo()
    60 
    61             name_input = input("欢迎注册,请输入用户名,长度在6-10之间:")
    62             password_input = input("请输入密码,长度在6-10之间:")
    63             cpassword_input = input("请确认密码,请与上次输入密码保持一致:")
    64             if name_input.strip() == "" or password_input.strip() == "" or cpassword_input.strip() == "":
    65                 print("用户名或密码为空,请重新输入")  # 判断用户名和密码是否输入为空
    66                 continue
    67             elif len(name_input) > 10 or len(name_input) < 6:
    68                 print('用户名长度不符合要求,请重新输入')
    69                 continue
    70             elif name_input in login_info:
    71                 print("用户名已存在,请直接登录")
    72                 break
    73             elif len(password_input) > 10 or len(password_input) < 6:
    74                 print('密码长度不符合要求,请重新输入')
    75                 continue
    76             elif password_input != cpassword_input:
    77                 print("两次输入的密码不一致,请重新输入")
    78                 continue
    79             else:
    80                 print("注册成功,请重新选择是否登录")
    81                 # 将注册结果写入文件
    82                 s = '%s,%s
    '%(name_input.upper(),password_input)
    83                 write(s)
    84                 break
    85     elif islogin == "-1":    #退出
    86         print("退出系统,再见!")
    87         break
    88     else:                  #错误指令
    89         print("输出错误,请按照提示选择您需要的操作")
    90         continue
    login&registe
  • 相关阅读:
    【笔记】模电lesson04 晶体管
    [笔记]模电如何判断和识别二极管的正负极
    [笔记]模电用数字万用表判断三极管管脚
    【笔记】模电lesson06 放大电路分析方法I
    【笔记】模电lesson07 放大电路分析方法II
    【翻译】在Verilog设计中使用参数化模块库(Quartus II)(Verilog)
    【原创】DE2实验练习解答—lab5 Clocks and Timers 【Verilog】【Digital Logic】
    【笔记】模电lesson 02 常用半导体器件
    【翻译】modelsim指南 I 之基本仿真(digital logic)
    【原创】DE2 实验练习解答—lab 2:数字和显示(digital Logic)(DE2)
  • 原文地址:https://www.cnblogs.com/luoyc/p/9987678.html
Copyright © 2011-2022 走看看