2018-08-1116:12:58
一、字符串
1、如果判断name变量量对应的值前四位"l"出现⼏次,并输出结果 name = "aleX leNb" print(name.count("l", 0, 4)) #count后面的两个参数是判断开始和结束位置的 顾头不顾尾 2、从name变量量对应的值中找到"N"对应的索引(如果找不不到则报错),并输出结果 name = "aleX leNb" print(name.index("N")) 3、从name变量量对应的值中找到"N"对应的索引(如果找不不到则返回-1)输出结果 name = "aleX leNb" print(name.find("N")) 4、从name变量量对应的值中找到"X le"对应的索引,并输出结果 name = "aleX leNb" print(name.find("X le") # 是找到的第一个字母的位置 5、通过对s切⽚片形成新的字符串串s3,s3 = "1345" s = "123a4b5c" s3 = s[0:7:2] print(s3) #1345 6、通过对s切⽚片形成字符串串s5,s5 = "c" s = "123a4b5c" s5 = s[-1:-2:-1] s3 = s[-1:-5:-1] print(s5) # c print(s3) # c5b4 7、通过对s切⽚片形成字符串串s6,s6 = "ba2" s = "123a4b5c" s6 = s[-3:-8:-2] print(s6) #ba2
二、列表、字典、文件操作
1、有字符串 "k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....} (升级题) str1 = 'k:1|k1:2|k2:3|k3:4' dic = {} a = str.split('|') for i in a : k, v = i.split(":") dic[k] =int(v) print(dic) 2、车牌区域划分, 现给出以下车牌. 根据车牌的信息, 分析出各省的车牌持有量. (升级题) dic = {} car = ['鲁A25444', '鲁B22333', '京B89889', '黑C23442', '泸Y23454', '黑I34432','渝W87665'] locals = {'泸': '上海', '黑': '黑龙江', '鲁': '山东', '京': '北京', '渝': '重庆'} for cars in car: first_name = cars[0] localtion = locals[first_name] # 这里的是一个字典,通过key来取值 取出上海、上东…… if dic.get(localtion) == None: dic[localtion] = 1 else: dic[localtion] += 1 print(dic) 法二: cars = ["鲁A32444", "鲁B12333", "京B8989M", "黑C49678", "黑C46555", "沪B25041", "黑C34567"] locations = {"沪": "上海", "京": "北京", "黑": "黑龙江", "鲁": "山东", "鄂": "湖北", "湘": "湖南"} loca = [] dic = {} for i in locations: count = 0 for el in cars: if el.startswith(i): count += 1 dic[locations[i]] = count print(dic) 3、打印大地区的各个区县: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, 'youku':{}, }, '上地':{ '百度':{}, }, }, '昌平':{ '沙河':{ '老男孩':{}, '北航':{}, }, '天通苑':{}, '回龙观':{}, }, '朝阳':{}, '东城':{}, }, '上海':{ '闵行':{ "人民广场":{ '炸鸡店':{} } }, '闸北':{ '火车战':{ '携程':{} } }, '浦东':{}, }, '山东':{}, } while True: for key in current_layer: print(key) choice=input(">>>:").strip() if len(choice)==0:continue if choice in current_layer: # parent_layer=current_layer parent_layer.append(current_layer)#把当前级加入父亲级称为列表最后一个元素 #下一次循环,当输入return,就可以直接取列表最后一个值 current_layer=current_layer[choice] elif choice=="return": # current_layer=parent_layer current_layer=parent_layer.pop()#取出列表最后一个值,因为他就是当前层的父亲级 elif choice=="quit": break 4、 判断一个数是否是水仙花数, 水仙花数是一个三位数, 三位数的每一位的三次方的和还等于这个数. # 那这个数就是一个水仙花数, 例如: 153 = 1**3 + 5**3 + 3**3 lst = [] count = 0 for i in range(100, 1000): a, b, c = str(i) if i == int(a)**3 + int(b)**3 + int(c)**3: lst.append(i) else: continue print(lst) 5、循环列表. 判断a[i]和a[i+1]之间的大小关系, 如果a[i]比a[i+1]大. 则进行互换.循环结束的时候. 当前列表中最大的数据就会被移动到最右端. #冒泡排序 li = [2, 1, 7, 4, 6, 12, 11, 26, 9, 34, 3, 9] for i in range(len(li) - 1): if li[i] > li[i + 1]: c = li[i] li[i] = li[i + 1] li[i + 1] = c else: continue print(li) #选择排序 data_set = [12,45,2,48,66,2,1,56,36,90,5,10,503] for i in range(len(data_set)): #大圈决定轮数 也就是我们选择的次数 minIndex = i for j in range(i+1,len(data_set)): #小圈就是我们每次 选择后比较的次数 #//如果后面的元素比我选择元素还小 就互换位置 if data_set[j] < data_set[minIndex] : minIndex=j temp = data_set[i] data_set[i]=data_set[minIndex] data_set[minIndex] = temp print(data_set)
6、有如下文件: le是老男孩python发起人,创建人。 le其实是人妖。 谁说le是sb? 你们真逗,le再牛逼,也掩饰不住资深屌丝的气质。 将文件中所有的alex都替换成大写的SB(文件的改的操作)。 import os with open('haha', 'r', encoding='utf-8') as f,\ open('haha_1', 'w', encoding='utf-8') as w: for i in f: line = i.replace('le', 'sb') w.write(line) os.remove('haha') os.rename('haha_1','haha')
7、将以下list3 改成list4 的样子: list3 = [ {"name": "alex", "hobby": "抽烟"}, {"name": "alex", "hobby": "喝酒"}, {"name": "alex", "hobby": "烫头"}, {"name": "alex", "hobby": "Massage"}, {"name": "wusir", "hobby": "喊麦"}, {"name": "wusir", "hobby": "街舞"}, ] 相同的名字合并并且hobby都装到hobby_list的列表中: 代码: list4 = [] li = [] for i in range(len(list3)): if list3[i]['name'] in li: continue else: li.append(list3[i]['name']) for i in li: hobby_list = [] for v in list3: if v['name'] == i: hobby_list.append(v['hobby']) else: continue dic = {} dic['name'] = i dic['hobby_list'] = hobby_list list4.append(dic) print(list4)
三、函数
1、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(升级题) import os import time def fun(a,b): with open(a,'r+',encoding='utf-8') as f,\ open('副本','w',encoding='utf-8') as w: # time.sleep(3) for i in f: if b in i: # w.write(i.replace(b,'*'*len(b))) w.write(i.replace(b,'')) #删除文件中的苍老师 else: w.write(i) os.remove(a) os.rename('副本',a) fun('信息','苍老师') 2、 编写程序处理理⽇志文件. 每天的日志都会统⼀写⼊到⼀个大文件中(可能上G). 现给出一个大的日志⽂件. 将⽇志文件中每天的日志摘出来. 生成每天的⼩⽂件, 需要时间的相关处理方法请⾃行百度 例如: 有如下⽂文件 2016-01-02 12:22:12 刘德华登录系统 2016-01-02 12:23:18 刘德华买了一盒中华⾹香烟 2016-01-02 12:24:55 刘德华退出系统 2016-01-03 01:00:22 麻花⼉疼登录系统 2016-01-03 01:10:32 刘德华疼登录系统 2016-01-03 04:30:21 麻花⼉疼买了一个麻花 2016-01-03 12:02:42 刘德华显示自己很溜溜 运⾏之后的结果. ⽣成两个文件: 2016-01-02.log with open('log.txt','r',encoding='utf-8') as f: s = set() for i in f: c = i.strip().split() if c[0] not in s: s.add(c[0]) with open('%s'%c[0],'w',encoding='utf-8') as w1: w1.write(i) else: with open('%s' % c[0], 'a+', encoding='utf-8') as w: # w.seek(0, 2) w.write(i) 3、⽤函数完成登录注册以及购物⻋车的功能. 难度系数一般 要求: 1, 启动程序, ⽤户可选择四个选项: 登录, 注册, 购物, 退出. 2, ⽤户注册, ⽤户名不能重复, 注册成功之后, ⽤用户名密码记录到文件中. 3, ⽤户登录, ⽤户名密码从⽂件中读取,进⾏三次验证, 验证不成功则退出整个程序. 4, ⽤户登录成功之后才能选择购物功能进行购物, 购物功能(就是将购物⻋封装到购物的函数中). 5, 退出则是退出整个程序. 欢迎计⼊⽼男孩购物系统: 1. 登录 2. 注册 3. 购物 4. 退出 代码: import time,os #文件名 file_name = 'user_list.txt' def file_exists(*args,**kwargs): ''' # 判断用户列表文件是否存在 :return: True 存在 False 不存在 ''' # 判断文件是否存在 if os.path.exists(file_name): return True else: with open(file_name, encoding='utf-8', mode='w') as mk: mk.write('张三 123') return False def registered_username(username): ''' #判断注册用户名是否可用 :param username: 用户名 :return: True 可用(用户不存在) False 不可用(用户已存在) ''' # 纯用户名列表,不包含密码 user_list = [] with open(file_name, encoding='utf-8') as f1: for i in f1: # 去空格,以空格切割,转换为列表 li = i.strip().split() # [张三,123] # 将用户名追加到列表中 user_list.append(li[0]) # 判断用户名是否存在列表中 if username in user_list: # 返回False return False else: return True def write_file(username,password): ''' #写入用户列表文件 :param username: 用户名 :param password: 密码 :return: True 写入成功 False 写入失败 ''' with open(file_name, encoding='utf-8', mode='a') as f2: f2.write('\n{} {}'.format(username, password)) return True def username_password(username,password): ''' #判断用户名和密码是否匹配 :param username: 用户名 :param password: 密码 :return: True 匹配成功 False 匹配失败 ''' # print(username,password) with open(file_name, encoding='utf-8', mode='r') as f3: for i in f3: # print(i) # 去空格,以空格切割,转换为列表 li = i.strip().split() # [张三,123] # 判断用户名和密码是否匹配 if username == li[0] and password == li[1]: result = True # 当找到匹配时,跳出循环 break else: result = False # 当整个用户列表遍历完成之后,再return return result def register(*args,**kwargs): ''' 注册逻辑 :return: ''' while True: username = input('请输入注册的用户名,或输入q返回菜单:').strip() if username == '': print('用户名为空,请重新输入!') elif username.upper() == 'Q': break else: # 执行判断用户名函数 result = registered_username(username) if result: password = input('请输入您的注册的密码:').strip() # 判断密码 if password == '': print('密码为空,请重新输入!') else: # 执行写入用户列表文件函数 result = write_file(username, password) if result: print('注册成功!,您的用户名为: {}\n倒计时2秒返回菜单!'.format(username)) time.sleep(2) user_menu() else: print('注册失败!请重试') else: print('用户名已经存在,请重新输入!') def login(count=0,max=3): ''' 登录逻辑 :param count: 初始失败次数 :param max: 最大失败次数 :return: ''' while count < max: count += 1 username = input('请输入用户名:').strip() password = input('请输入密码:').strip() # 执行验证用户名和密码函数 result = username_password(username,password) if result: print('登陆成功\n倒计时1秒返回菜单!') time.sleep(1) user_menu() break else: print('用户名或密码错误,还剩余{}次机会!'.format(max - count)) # 返回主菜单 user_menu() def user_menu(*args,**kwargs): ''' # 用户菜单 ''' # 判断文件是否存在,不存在创建文件 file_exists() # 循环 while True: # 打印菜单 menu = ['注册', '登录', '退出'] print('bbs系统'.center(25, '#')) for i in range(len(menu)): print('{}\t{}'.format(i + 1, menu[i])) print(''.center(27, '#')) number = input('请选择序号: ').strip() if number == '1': # 执行注册程序 register() elif number == '2': # 执行登录程序 login() elif number == '3': exit() else: print('输入错误,请重新输入!') # 执行菜单 user_menu()
4、IBM指数 创建并输出菜单, 菜单是不可变的. 所以使用元组 menus = ("1, 录入", "2, 查询", "3, 删除", "4, 修改", "5, 退出") 存储用户的信息 id: {'name':'名字', 'weight':体重, 'height':身高} 例如:目前有两个用户信息:1. 汪峰, 2. 章子怡 存储结构: { 1:{'name':'汪峰', 'weight':80, 'height':1.8, 'BMI':24.7}, 2:{'name':'章子怡', 'weight':50, 'height':1.65, 'BMI':18.4} } bodies = {} body_id = 1 # 编号从1开始 体质指数(BMI)= 体重(kg)÷ (身高(m) x 身高(m)) 体重的单位: KG 身高的单位: m 需求:首先。打印菜单,然后用户输入选择的菜单项 输入1:进入录入环节。用户需要录入:名字,身高,体重. 由程序计算出BMI指数. 保存到bodies字典中. 第一个用户的id是1, 第二个是2, 以此类推 录入完毕后. 提示用户是否继续录入. 如果选择是, 则继续进行录入, 直到用户输入否. 则返回到主菜单 输入2: 进入查询环节, 提示用户输入要查询的人的id. 如果不存在,给与提示, 如果存在. 则显示出该用户的全部信息(名字,身高,体重,BMI) 然后提示用户是否继续查询. 如果选择是, 继续进行查询, 直到用户输入否, 返回主菜单 输入3: 进入删除环节, 提示用户输入要删除的人的id, 如果id不存在, 给与提示, 如果存在, 则执行删除操作. 并提示删除成功. 然后提示用户是否继续删除, 如果是, 继续让用户选择要删除的id, 直到用户输入否, 返回主菜单 输入4: 进入修改环节, 首先让用户输入要修改的人的id, 根据id查找用户信息, 如果不存在, 给与提示, 如果存在, 将用户原信息进行打印, 然后提示用户输入新的名字, 身高, 体重. 由程序重新计算BMI指数. 并将新的信息保存在bodies中. 同时给用户展示新的用户信息 然后提示用户是否继续修改, 如果是, 则继续要求用户输入id信息. 直到用户输入否, 返回主菜单. 输入5: 程序退出. 输入其他任何内容. 都予以提示不合法. 让用户重新进行输入 代码区: bodies = {} tager = True while tager: print('请输入相应的操作步骤(首菜单)'.center(50, '=')) menus = ('1, 录入', '2, 查询', '3, 删除', '4, 修改', '5, 退出') for i in menus: print(i) print() usr = input("请输入操作序号: ").strip() if str(1) == usr: tager_1 = True while tager_1: print('录入菜单'.center(59, '+')) menus_ = ('1, 录入', '2, 返回上一层', '3, 查看') for v in menus_: print(v) print("".center(63, '=')) usr_1 = input('请选择操作序号: ') if usr_1 == str(1): if not bodies : # bodies == {} 的简便写法就是 not XX body_id = 1 else: body_id = len(bodies)+1 bodies[body_id] = {} bodies[body_id]['name'] = input("输入自己的姓名:").strip() bodies[body_id]['weigth'] = float(input("输入自己的体重:").strip()) bodies[body_id]['heigth'] = float(input("输入自己的高度:").strip()) bodies[body_id]['BMI指标'] = float("%.1f"%(bodies[body_id]['weigth']/(float(bodies[body_id]['heigth'])**2))) print('录入完成'.center(59,'=')) elif usr_1 == str(2): tager_1 = False elif usr_1 == str(3): print(bodies) else: print("输入有误,请重试!") continue elif str(2) == usr: tager_2 = True while tager_2: print('查询菜单'.center(59, '+')) chaXun = input('请输入想要查询的姓名(输入0返回首页): ') if chaXun == str(0): tager_2 = False usr = 0 else: l1 = [] print("查询的数据".center(59, '-')) for i in bodies: if chaXun == bodies[i]['name']: l1.append(bodies[i]) else: continue if not l1: # 判断一个字典或则列表是个空集合时用 == {} ==[] print(" 查询无果!!!") else: for i in l1: print(i) elif str(3) == usr: tager_3 = True while tager_3: print("删除菜单".center(59, '+')) shanChu = input("请输入删除的名字(输入0返回首页)>>> ") if shanChu == str(0): tager_3 = False usr = 0 else: li = [] for i in bodies: if shanChu == bodies[i]['name']: li.append(i) break else: continue else: print('%s 没有在数据库里面'%shanChu) for v in li: del bodies[v] print('%s 数据已删除!!!'%shanChu) tager_5 = True while tager_5: print("".center(62, '+')) usr_3 = input("2 ---> 查询删除后的数据 1 ---> 返回上一级 请选择操作>>> ").strip() if str(2) == usr_3: print(bodies) elif str(1) == usr_3: tager_5 = False elif str(4) == usr: tager_4 = True while tager_4: print('修改菜单'.center(59,'=')) usr_4 = input('请输入要修改的名字(输入0返回首页)>>> ') if usr_4 == str(0): tager_4 = False usr = 0 else: for i in bodies: if bodies[i]['name'] == usr_4: bodies[i]['name'] = input("输入自己的姓名:").strip() bodies[i]['weigth'] = float(input("输入自己的体重:").strip()) bodies[i]['heigth'] = float(input("输入自己的高度:").strip()) bodies[i]['BMI指标'] = float("%.1f" % (bodies[i]['weigth'] / (float(bodies[i]['heigth']) ** 2))) print(bodies[i]) break else: continue else: print(" %s 没有在数据库中"%usr_4) elif str(5) == usr: exit() else: print('输入有误,请重试!') continue