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、打印大地区的各个区县: zone = { '山东' : { '青岛' : ['四方','黄岛','崂山','李沧','城阳'], '济南' : ['历城','槐荫','高新','长青','章丘'], '烟台' : ['龙口','莱山','牟平','蓬莱','招远'] }, '江苏' : { '苏州' : ['沧浪','相城','平江','吴中','昆山'], '南京' : ['白下','秦淮','浦口','栖霞','江宁'], '无锡' : ['崇安','南长','北塘','锡山','江阴'] }, '浙江' : { '杭州' : ['西湖','江干','下城','上城','滨江'], '宁波' : ['海曙','江东','江北','镇海','余姚'], '温州' : ['鹿城','龙湾','乐清','瑞安','永嘉'] } } #省列表 province = list(zone.keys()) while True: print('省'.center(20, '*')) # 打印省列表 for i in province: print('{}\t{}'.format(province.index(i)+1,i)) province_input = input('请输入省编号,或输入q/Q退出:').strip() if province_input.isdigit(): province_input = int(province_input) if province_input > 0 and province_input <= len(province): #省编号,由于显示加1,获取的时候,需要减1 province_id = province_input - 1 #城市列表 city = list(zone[province[province_id]].keys()) #进入市区列表 while True: print('市'.center(20, '*')) for j in city: print('{}\t{}'.format(city.index(j) + 1, j)) city_input = input("请输入市编号,或输入b(back)返回上级菜单,或输入q(quit)退出:").strip() if city_input.isdigit(): city_input = int(city_input) if city_input > 0 and city_input <= len(city): # 市编号,由于显示加1,获取的时候,需要减1 city_id = city_input - 1 #县列表 county = zone[province[province_id]][city[city_id]] # 县列表 while True: print('县'.center(20, '*')) for k in county: print('{}\t{}'.format(county.index(k) + 1, k)) #到县这一级,不能输入编号了,直接提示返回菜单或者退出 county_input = input("输入b(back)返回上级菜单,或输入q(quit)退出:").strip() if county_input == 'b': # 终止此层while循环,跳转到上一层While break elif county_input == 'q': # 结束程序 exit() else: print("\033[41;1m已经到底线了,请返回或者退出!\033[0m") else: print("\033[41;1m市编号 {} 不存在!\033[0m".format(city_input)) elif city_input.upper() == 'B': break elif city_input.upper() == 'Q': #由于在多层while循环里面,直接exit退出即可 exit() else: print("\033[41;1m输入市编号非法!\033[0m") else: print("\033[41;1m省编号 {} 不存在!\033[0m".format(province_input)) elif province_input.upper() == 'Q': break else: print("\033[41;1m输入省编号非法!\033[0m") 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)
老师代码:
list4 = []
for ren in list3:
for el in list4:
if el['name'] == ren['name']:
el['hobby_list'].append(ren['hobby'])
break
else:
dic = {}
dic['name'] = ren['name']
dic['hobby_list'] = [ren['hobby']]
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
zone
=
{
'山东'
: {
'青岛'
: [
'四方'
,
'黄岛'
,
'崂山'
,
'李沧'
,
'城阳'
],
'济南'
: [
'历城'
,
'槐荫'
,
'高新'
,
'长青'
,
'章丘'
],
'烟台'
: [
'龙口'
,
'莱山'
,
'牟平'
,
'蓬莱'
,
'招远'
]
},
'江苏'
: {
'苏州'
: [
'沧浪'
,
'相城'
,
'平江'
,
'吴中'
,
'昆山'
],
'南京'
: [
'白下'
,
'秦淮'
,
'浦口'
,
'栖霞'
,
'江宁'
],
'无锡'
: [
'崇安'
,
'南长'
,
'北塘'
,
'锡山'
,
'江阴'
]
},
'浙江'
: {
'杭州'
: [
'西湖'
,
'江干'
,
'下城'
,
'上城'
,
'滨江'
],
'宁波'
: [
'海曙'
,
'江东'
,
'江北'
,
'镇海'
,
'余姚'
],
'温州'
: [
'鹿城'
,
'龙湾'
,
'乐清'
,
'瑞安'
,
'永嘉'
]
}
}
#省列表
province
=
list
(zone.keys())
while
True
:
print
(
'省'
.center(
20
,
'*'
))
# 打印省列表
for
i
in
province:
print
(
'{}\t{}'
.
format
(province.index(i)
+
1
,i))
province_input
=
input
(
'请输入省编号,或输入q/Q退出:'
).strip()
if
province_input.isdigit():
province_input
=
int
(province_input)
if
province_input >
0
and
province_input <
=
len
(province):
#省编号,由于显示加1,获取的时候,需要减1
province_id
=
province_input
-
1
#城市列表
city
=
list
(zone[province[province_id]].keys())
#进入市区列表
while
True
:
print
(
'市'
.center(
20
,
'*'
))
for
j
in
city:
print
(
'{}\t{}'
.
format
(city.index(j)
+
1
, j))
city_input
=
input
(
"请输入市编号,或输入b(back)返回上级菜单,或输入q(quit)退出:"
).strip()
if
city_input.isdigit():
city_input
=
int
(city_input)
if
city_input >
0
and
city_input <
=
len
(city):
# 市编号,由于显示加1,获取的时候,需要减1
city_id
=
city_input
-
1
#县列表
county
=
zone[province[province_id]][city[city_id]]
# 县列表
while
True
:
print
(
'县'
.center(
20
,
'*'
))
for
k
in
county:
print
(
'{}\t{}'
.
format
(county.index(k)
+
1
, k))
#到县这一级,不能输入编号了,直接提示返回菜单或者退出
county_input
=
input
(
"输入b(back)返回上级菜单,或输入q(quit)退出:"
).strip()
if
county_input
=
=
'b'
:
# 终止此层while循环,跳转到上一层While
break
elif
county_input
=
=
'q'
:
# 结束程序
exit()
else
:
print
(
"\033[41;1m已经到底线了,请返回或者退出!\033[0m"
)
else
:
print
(
"\033[41;1m市编号 {} 不存在!\033[0m"
.
format
(city_input))
elif
city_input.upper()
=
=
'B'
:
break
elif
city_input.upper()
=
=
'Q'
:
#由于在多层while循环里面,直接exit退出即可
exit()
else
:
print
(
"\033[41;1m输入市编号非法!\033[0m"
)
else
:
print
(
"\033[41;1m省编号 {} 不存在!\033[0m"
.
format
(province_input))
elif
province_input.upper()
=
=
'Q'
:
break
else
:
print
(
"\033[41;1m输入省编号非法!\033[0m"
)