Python补充练习

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, 功能如下

  1. 如果字典中 ID 的值为奇数,则对 money 的值加 20
  2. 如果字典中 ID 的值为偶数, 则对 money 的值加 10
  3. 打印输出列表,查看最终的结果
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('=========')

在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值