1,存在如下列表, 想要对列表中的字典按照 年龄大小排序,请书写代码完成这个需求
list1 = [{'name': 'd', 'age': 19},
{'name': 'b', 'age': 16},
{'name': 'a', 'age': 16},
{'name': 'c', 'age': 20}]
#方法一
sorted_list = sorted(list1,key= lambda st : st['age'])
#sorted() 函数对所有可迭代的对象进行排序操作。
#内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
print(sorted_list)
#方法二
list1.sort(key=lambda x: x['age'])
print(list1)
2,一个学校,有3个办公室,现在有8位老师等待工位的分配
#一个学校,有3个办公室,现在有8位老师等待工位的分配,请编写程序,完成随机的分配.
import random
bgs = [[], [], []] #3办公室
teacher = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
# 开始分配
for name in teacher:
index = random.randint(0, 2) #0,2之间随机生成一个数字
bgs[index].append(name) # 将老师加入到办公室里
# 遍历输出分配结果
i = 1 # 办公室初始为1号
for b in bgs:
print('办公室%d中有%d个老师,分别是:' % (i, len(b)))
i += 1
for name in b:
print('%s' % name, end='')
print('\n')
3. 封装一个获取列表数据中最大值的函数my_max
import random
a = []
def make_data():
''' 在列表中随机创建 10 个数'''
for i in range(10):
b = random.randint(0, 100)
# print(b, ' ', end='')
a.append(b) # 把随机数添加到列表中
def my_max():
print(a) # 查看列表里的随机数
print(max(a)) # 获取最大的值
make_data()
my_max()
4,要求: 定义一个函数 func, 功能如下
- 如果字典中 ID 的值为奇数,则对 money 的值加 20
- 如果字典中 ID 的值为偶数, 则对 money 的值加 10
- 打印输出列表,查看最终的结果
my_list = [{'id': 1,'money': 10},
{'id': 2, 'money': 20},
{'id': 3, 'money': 30},
{'id': 4, 'money': 40}]
def func():
for i in my_list:
if i.get('id') % 2 == 1: # 奇数
i['money'] = i.get('money') + 20
else:
i['money'] = i.get('money') + 10
print(my_list)
func()
5.烤地瓜
烤地瓜规则:
1.地瓜有自己的状态,默认是生的,地瓜可以进行烧烤
2.地瓜有自己烧烤的总时间,由每次烧烤的时间累加得出
3.地瓜烧烤时,需要提供本次烧烤的时间
4.地瓜烧烤时,地瓜状态随着烧烤总时间的变化而改变:[0, 3) 生的、[3, 6) 半生不熟、[6, 8) 熟了、>=8 烤糊了
5.输出地瓜信息时,可以显示地瓜的状态和烧烤的总时间
烤地瓜需求拓展:
1.地瓜可以添加佐料,如 盐、孜然、辣酱等
2.输出地瓜信息时,可以显示地瓜的状态、烧烤总时间、以及添加过的所有佐
class SweetPotato:
def __init__(self):
self.cooked_state = '生的' # 地瓜状态
self.cooked_time = 0 # 烧烤总时间
self.condiments = [] # 佐料列表(拓展)
def __str__(self):
return '地瓜状态:%s,烧烤总时间:%d,添加的作料:%s' % (self.cooked_state,
self.cooked_time, self.condiments)
def cook(self,time):
'''烧烤'''
# 本次烧烤时间累加到 烧烤总时间中
self.cooked_time += time
# 根据烧烤总时间 改变地瓜的状态
if self.cooked_time>= 0 and self.cooked_time < 3:
self.cooked_state = '生的'
elif self.cooked_time>= 3 and self.cooked_time < 6:
self.cooked_state = '半生不熟的'
elif self.cooked_time>= 6 and self.cooked_time < 8:
self.cooked_state = '熟了'
elif self.cooked_time>= 8 :
self.cooked_state = '烤糊了'
def add_condiment(self,condiment):
'''添加佐料'''
self.condiments.append(condiment) # 向上边定义的作料列表添加自定义的作料
# 开始烤
digua1 = SweetPotato()
digua1.cook(1)
print(digua1) # 地瓜状态:生的, 烧烤总时间:1
digua1.cook(2)
digua1.add_condiment('盐') # (拓展)
print(digua1) # 地瓜状态:半生不熟, 烧烤总时间:3
digua1.cook(3)
digua1.add_condiment('孜然') # (拓展)
print(digua1) # 地瓜状态:熟了, 烧烤总时间:6
digua1.cook(3)
digua1.add_condiment('辣椒酱')# (拓展)
print(digua1) # 地瓜状态:烤糊了, 烧烤总时间:9
6.名片系统
#card_tools里:
# 所有名片记录的列表
card_list = []
def show_menu():
'''显示菜单'''
print('*' * 50)
print('欢迎使用【名片管理系统】v1.0\n')
print('1.新建名片')
print('2.显示全部')
print('3.查询名片\n')
print('0.退出系统')
print('*' * 50)
def new_card():
'''新建名片'''
print('-' * 50)
print('功能:新建名片')
# 提示用户输入名片信息
name = input('请输入姓名:')
phone = input('请输入电话:')
qq = input('请输入qq:')
email = input('请输入邮箱:')
# 将用户信息保存到一个字典
card_dict = {'name': name,
'phone': phone,
'qq': qq,
'email': email}
# 将用户字典添加到名片列表
card_list.append(card_dict)
print(card_list)
#提示成功添加信息
print('成功添加%s的名片' % card_dict['name'])
def show_all():
'''显示全部'''
print('-' * 50)
print('功能:显示全部')
# for card_dict in card_list:
# print(card_dict)
'''打印表头'''
for name in ['姓名', '电话', 'qq', '邮箱']:
print(name, end='\t\t')
print('')
# 打印分割线
print('=' * 50)
for card_dict in card_list:
print('%s\t\t%s\t\t%s\t\t%s\t\t' % (card_dict['name'],
card_dict['phone'],
card_dict['qq'],
card_dict['email']))
# 判断是否有名片记录
if len(card_list) == 0:
print('提示:没有名片记录')
return
def search_card():
'''搜索'''
print('-' * 50)
print('功能:搜索名片')
#1,提示要搜索的姓名
find_name = input('请输入要搜索的姓名:')
find_dict = {}
#2,遍历字典
for i in card_list:
if i['name'] == find_name:
# print('姓名\t\t电话\t\tqq\t\t邮箱')
# print('-' * 40)
# print('%s\t\t%s\t\t%s\t\t%s\t\t'%(card_dict['name'],
# card_dict['phone'],
# card_dict['qq'],
# card_dict['email']))
# print('-' * 40)
print(i)
find_dict = i
#todo 针对找到的字典进行后续操作:删除、修改
deal_card(find_dict)
break
else:
print('没有找到%s' % find_name)
def deal_card(find_dict):
'''操作搜索到的名片字典
:param find_dict:找到的名片字典'''
# print(find_dict)
action_str = input('请选择要执行的操作'
'[1]修改 [2]删除 [0] 返回上级菜单')
if action_str == '1':
print('修改')
find_dict['name'] = input('请输入修改后姓名:')
find_dict['phone'] = input('请输入修改后电话:')
find_dict['qq'] = input('请输入修改后qq:')
find_dict['email'] = input('请输入修改后邮箱:')
print('%s的名片修改成功'% find_dict['name'])
elif action_str =='2':
card_list.remove(find_dict)
print('删除成功')
elif action_str == '0':
return
else:
print('输入错误')
#card_mains里:
from test117.t0619 import card_tools
while True:
card_tools.show_menu() # 要写模块名.模块里的函数来调用
action = input('请选择:')
if action == '1':
card_tools.new_card()
elif action == '2':
card_tools.show_all()
elif action == '3':
card_tools.search_card()
elif action == '0':
print('欢迎再次使用【名片管理系统】')
break
else:
print('输入错误,清重新输入')
7.内置方法mro :
class A:
def test(self):
print("Class A test")
def demo(self):
print("Class A demo")
class B:
def demo(self):
print("Class B demo")
def test(self):
print("Class B test")
class C(A):
pass
class D(C,B):
pass
d = D()
d.test()
d.demo()
#输出结果:
# Class A test
# Class A demo
print(D.__mro__)
#(<class '__main__.D'>, <class '__main__.C'>, <class '__main__.A'>, <class
#'__main__.B'>, <class 'object'>)
#总结:
#1、在搜索方法时,是按照__mro__的输出结果从左至右的顺序查找的。
#2、如果在当前类中找到方法,就直接执行,不再搜索
#3、如果没有找到,就查找下一个类中是否有对应的方法,如果找到,就直接执行,不再搜索
#4、如果找到最后一个也没有,那么程序保错
#5、开发中,尽量避免这种情况。继承的父类之间有同名的属性或者方法
8.搬家具
规则:
1.家具分不同的类型,并占用不同的面积
2.输出家具信息时,显示家具的类型和家具占用的面积
———————————————————————————————————————
3.房子有自己的地址和占用的面积
4.房子可以添加家具,如果房子的剩余面积可以容纳家具,则提示家具添加成功;否则提示添加失败
5.输出房子信息时,可以显示房子的地址、占地面积、剩余面积
class Jiaju:
def __init__(self,type,area):
self.type = type
self.area = area
def __str__(self):
return '家具的类型是:%s,面积是:%d' % (self.type, self.area)
class House:
def __init__(self,address, mianji):
self.address = address
self.mianji = mianji
self.free_area = mianji
self.jiaju = []
def __str__(self):
return '房子的地址:%s,面积:%d,剩余面积:%d,家具有:%s' % (self.address,
self.mianji,
self.free_area,
self.jiaju)
def add_jiaju(self, jiaju): # 参数设置为jiaju对象,传递的参数应该为家具类创建的对象
# print('开始添加。。')
if jiaju.area <= self.free_area:
self.free_area = self.free_area - jiaju.area
print('添加家具成功')
self.jiaju.append(jiaju.type)
print('剩余面积%d' % self.free_area) # 查看一下添加丸家具的剩余房子面积
else:
print('添加失败')
ban = Jiaju('板凳', 10)
zhuo = Jiaju('桌子',20)
print(ban)
print(zhuo)
fang = House('广陵邑', 2240)
fang.add_jiaju(ban)
fang.add_jiaju(zhuo) # 添加成功
print(fang)
9.Game
定义一个游戏类 Game , 包含 属性 玩家名字
1.要求记录游戏的最高分(top_score 类属性)和获得最高分的玩家名字(top_score_player)
2. 定义方法: show_help 显示游戏的帮助信息 输出这是游戏的帮助信息
3.定义方法:show_top_score , 打印输出游戏的最高分
4.定义方法: start_game , 开始游戏, 规则如下
①使用随机数获取本次游戏得分 范围 (10 - 100 )之间
② 判断本次得分和最高分之间的关系:
如果本次得分比最高分高, 修改最高分和获得最高分的玩家名字
如果分数小于等于最高分,则不操作
③输出本次游戏得分 top_score_player ),
5. 主程序步骤
1)查看游戏的帮助信息
2) 查看当前的最高分
3) 创建一个玩家小王,玩一局游戏, 输出当前最高分和玩家名字
4)创建一个玩家小李,玩一局游戏, 输出当前最高分和玩家名字
5)创建一个玩家小张,玩一局游戏, 输出当前最高分和玩家名字
class Game:
# 要把最高分和最高分玩家设置全局变量。self.是对象属性,每次都会回复初始值。而最高记录被刷新会一直保存
top_score = 88
top_score_player = '绵逸' # 最高分和玩家名字初始值可以设置0和‘’
def __init__(self, player_name):
self.player_name = player_name
def show_help(self):
print('这是游戏的帮助信息')
def show_top_score(self):
print('游戏的最高分是:%d,纪录保持者:%s' % (Game.top_score,
Game.top_score_player))
def start_game(self):
i = random.randint(10, 100) # 随机生成的数里包含100这个数
if i > Game.top_score:
Game.top_score = i
Game.top_score_player = self.player_name
else:
pass
print('%s本次游戏得分:%d' % (self.player_name, i))
#主程序
xw = Game('小王')
xw.show_help() # 查看游戏的帮助信息
xw.show_top_score() # 查看当前的最高分
xw.start_game()
xw.show_top_score() # 查看当前的最高分
print('=========')
xl = Game('小李')
xl.start_game()
xl.show_top_score()
print('=========')
xz = Game('小张')
xz.start_game()
xz.show_top_score()
print('=========')