Python自动化学习笔记(三)——Python数据类型(list、dic)、字符串常用方法、读写文件

守給你的承諾、 提交于 2019-12-28 22:05:29

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\n')
fw.close()

3.3追加文件

fa=open('users',mode='a')  #‘a’模式:如果没有这个文件,就创建一个;如果有,那么在原文件后面追加新的东西
fa.write('qiaomeiling,123456\n')
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('\n')
 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\n")
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\n'%(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

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!