Python3作业解析

https://www.jianshu.com/p/ffa046334830

猜数游戏

# coding:utf-8
# 2019/3/20 09:47
n = 0
while n < 3:
    bef_n = n
    n += 1
    # 提示用户输入一个数字 inp = input()
    num = input("输入数字:")

    # 判断用户输入的值是否等于 18 == inp
    if not num.isdigit():
        print("请输入数字")
        n = bef_n
        continue

    num = int(num)

    if num == 18:
        print("猜对了")
    elif num > 18:
        print('大了')
    # 允许用户尝试 3 次

    # 假如 3 次机会都没有猜对,就再次提示用户是否继续
    if n == 3:
        while True:
            inp = input("是否继续,[y:继续游戏,n:退出游戏]")
            if inp == 'y':
                n = 0
                break
            elif inp == 'n':
                exit('退出游戏')


# 用户输出 y ,就再给 3 次机会。 输入 n 则退出游戏

企业实战案例一

f = open('./sorc.txt', 'r', encoding='utf-8')
content = f.read()
f.close()

# print(content)

li = content.split('-')
# print(li)
for item in content.split('-'):
# for item in li:
    # print(item)
    file_name = item.split(';')[0].split('=')[-1]
    file_name = file_name + '.yaml'
    # print(file_name)
    item =item.replace('=', ': ').replace(';', '\n')
    f = open(file_name, 'w', encoding='utf-8')
    f.write(item)

员工查询系统

info =  {
    'liubin':{
        'phone': '18766396788',
        'addr': 'qingdao',
        'age': 22
        },
    'wangxin': {
        'phone': '123456789999',
        'addr': 'changchun',
        'age': 24
        },
    'zhangjinhui': {
        'phone': '987654321111',
        'addr': '',
        'age': 21
        }
    }

while True:
    name = input("请输入查询的员工名称【 q 退出 】>:")

    if name in info:
        while True:
            info_type = input("输入查询的信息\n【phone 电话,addr 地址, age 年龄, b 返回上一层】>:")

            if info_type == 'b':
                break

            msg = info[name].get(info_type, '输入有误')
            print(msg)

            # if msg != None:
            #     print("你查的" + info_type + ":%s" % msg)
            # elif msg == '':
            #     print("员工的此类信息未录入")
            # else:
            #     print('输出错误')
    elif name != '':
        print('员工不存在')

上王者之英雄查询系统开发

import os, sys
"""
名称:钟馗 简称:zk
初始生命值:680
初始攻击力:120
消耗: 60
"""
# {'short_name': 'zk', 'health': '680', 'attack': '120', 'consum': '60'}
# {('钟馗', 'zk'): 'short_name': 'zk', 'health': '680', 'attack': '120', 'consum': '60'}}
info = {}


def create_info():
    """创建英雄数据字典"""
    with open('./hero.db', 'r', encoding='utf-8') as f:
        for line in f:
            name, short_name, health, attack, consum = line.split('|')
            info[(name, short_name)] = {
                'short_name': short_name,
                'health': health,
                'attack': attack,
                'consum': consum
            }
    return info


def display(data_dict):
    """
    按照格式显示数据
    :param data_dict: 具体英雄的数据,是字典类型
    :return:
    """
    if type(data_dict) is dict:
        print("""
        名称:{name} 简称:{short_name}
        初始生命值:{health}
        初始攻击力:{attac}
        消耗: {consum}
            """.format(**data_dict))
    else:
        print("需要是 dict 类型,不是{}".format(type(data_dict)))


def search(heros_info,search_name):
    info_data = ''
    for item in heros_info:
        if search_name in item:
            info_data = heros_info[item]
            info_data.update({'name': item[0]})

    return info_data

# @outer
def edit_info(info_list):
    """
    修改英雄属性
    :param info_list: [‘xq’, 'attack', '190']
    :return:
    """
    map_info = {
        'health': 2,
        'attack': 3,
        'consum': 4
    }

    with open('hero.db') as rf, open(
        'hero.db.swap', 'w', encoding='utf-8'
    ) as wf:
        for line in rf:
            # print(line)
            old_info_list = line.split('|')
            # print(old_info_list)
            if info_list[0] in old_info_list:
                idx = map_info.get(info_list[1])
                if not idx:
                    return "属性有误"
                else:
                    print(idx)
                    old_info_list[idx] = info_list[-1]
                    line = '|'.join(old_info_list)
                    if not line.endswith('\n'):
                        line = line + '\n'
            wf.write(line)
    os.remove('hero.db')
    os.rename('hero.db.swap','hero.db')
# map_dic = {
#     '1': search,
#     '2': edit_info
# }

while True:
    heros_info = create_info()
    inp = input("请选择:\n 1. 查询\n 2. 修改英雄属性\n:")
    if inp == '1':
        while True:
            inp_name = input("请输入英雄名称>:")
            if inp_name == 'q':
                sys.exit("系统退出")
            elif inp_name == 'b':
                break
            elif inp_name:
                r = search(heros_info,inp_name)
                if not r:
                    print('错误的英雄名称')
                else:
                    display(r)

    elif inp == '2':
        while True:
            inp_info = input("输入修信息\n【生命值: health】\n 格式:【英雄名称 属性 值】\n》")
            info_list = inp_info.split()
            if len(info_list)  == 3:
                if not info_list[-1].isdigit():
                    print("输入有误")
                    continue
                edit_info(info_list)
    elif inp == 'q':
        break
    else:
        print("输入错误")

攻击系统开发

class Hero:
    def __init__(self, name, lev,init_self, attack_num):
        self.name = name
        self.lev = lev
        self.init_self = init_self
        self.attack_num = attack_num

    def attack(self, obj):
        obj.init_self -= self.attack_num
        if hasattr(self, 'mana'):
            self.init_mana -= self.mana
            # print('--_>', self.init_mana)


    # def add_zb(self):
    #     pass

class Master(Hero):
    def __init__(self, name, lev,init_self, attack_num, init_mana, mana):
        super().__init__(name, lev,init_self, attack_num)
        self.init_mana = init_mana
        self.mana = mana

class Soldier(Hero):
    pass

rz = Master('瑞兹', 1, 790, 69, 90, 10)
gl = Soldier('盖伦', 1, 950, 80)

print(rz.init_mana)
print(gl.init_self)

rz.attack(gl)
print('*' * 20)

print(rz.init_mana)
print(gl.init_self)

rz.attack(gl)
print('*' * 20)

print(rz.init_mana)
print(gl.init_self)

多级菜单

#!/usr/bin/env python
# -*- coding:utf-8 -*-

# 导入
import time


def timer():
    """
    打印出当前时间
    :return:
    """
    print(time.strftime("%Y-%m-%d  %X"))

# 三级菜单示例函数
def func31():
    print("我是 3 级 第 1 项")

def func32():
    print("我是 3 级 第 2 项")

## 二级菜单示例函数
def get_secon_item():
    print("2 级菜单第 2 项")


# 三级菜单示例列表
menu_third_list = [
    ['三级菜单第一项', func31, ''],
    ['三级菜单第二项', func32, ''],

]

#########  三级菜单的功能函数

def get_cpu():
  print('cpu 信息')

def get_mem():
  print('memery 信息')

def get_disk():
  print('disk 信息')

def get_net():
  print('network 信息')

# 三级菜单系统信息查询
menu_sys_list = [
    ['检查 cpu 信息', get_cpu, ''],
    ['检查 memery 信息', get_mem, ''],
    ['检查 disk 信息', get_disk, ''],
    ['检查 network 信息', get_net, '']
]


# 二级菜单列表
daily_check_item = [
  ['系统基础信息,继续...', '', menu_sys_list ]
]

secon_menu_list = [
    ['二级菜单-->我有 3 级的,要看不', '', menu_third_list],
    ['二级级菜单-->选我直接看内容', get_secon_item, '']

]


# 顶级菜单列表
"""
设置示例: 
[['菜单名称', 函数名,下一级菜单列表名 ]]

函数名和下一级菜单,假如没有写成空字符串 ''


"""

menu_list = [
    ['当前时间', timer, ''],
    ['每日检查项目信息', '', daily_check_item],
    ['一级菜单','',secon_menu_list]
]


# 空字典
menu_dict = {}

# 定义一个变量,把一开始的顶级菜单的赋值个  current_list
current_list = menu_list

# 存放当前列表的上一层,以便下次循环时使用
up_lay_list = []

import sys

while True:
    # 循环当前层级的菜单列表,并且创建出一个菜单字典
    for idx, item in enumerate(current_list, 1):
        menu_dict.update({str(idx): {"title": item[0], "func": item[1], "next_menu": item[2]}})

    # 循环这个菜单字典打印出当前层级的菜单名称
    for _index, sub_dic in menu_dict.items():
        print(_index, sub_dic['title'])

    #  进入用户选择菜单项并且处理用户的选择逻辑部分
    while True:
        # 提示用户选择
        inp = input('>>:')

        # 假如直接输入回车,就跳出
        if not inp: break
        
        # 输入 q 就退出此程序
        if inp == 'q':
            sys.exit("系统退出")
        
        # 输入 b 就 返回上一级菜单
        if inp == 'b':
            # 这里需要判断一下当前的菜单是否有上一级菜单
            # 有, 从 存放上级菜单的列表中取出当前菜单的上一级菜单
            # 并赋值给 存放当前层菜单的变量,应该主程序之后循环处理
            # 这个变量的值,也就是 current_list, 并且清空菜单字典
            # 
            # 没有上一级菜单就退出当前的循环,回到外层循环打印当前的菜单 
            if up_lay_list:
                current_list = up_lay_list.pop()
                menu_dict.clear()
            break
         
        # 这里是假设输入的选择 不在字典的 key 中,就返回
        if inp not in menu_dict: break

        # 代码运行到这里,说明用户的选择是存在于列表中的
        # 这里有个两种情况:
        # 1. 选择的菜单项有下一级菜单
        elif menu_dict[inp]['next_menu']:
            # 因为,选择了进入下一级菜单了,需要保存一下当前菜单
            # 并且当前菜单会作为将要进入到下一级菜单的上一级菜单
            # 
            up_lay_list.append(current_list)

            # 获取到当前菜单的下一级菜单,并作为外部循环的菜单列表
            current_list = menu_dict[inp]['next_menu']
            menu_dict.clear()
            
            # 跳出本层循环,在外层循环中创建新的菜单并且打印出来
            break
        # 2. 选择的菜单没有下一级菜单,但一定会有处理此菜单项的函数
        elif menu_dict[inp].get('func'):
            # 获取函数,注意这里先不执行,因为希望在打印函数返回值
            # 之前再次打印一下当前菜单,好让用户看到接下来可以选择
            # 的菜单项。
            func = menu_dict[inp].get('func')

            # 再次打印出当前菜单项,提高用户体验度
            for k, v in menu_dict.items():
                print(k, v['title'])

            # 执行函数
            print('-' * 20)
            print()
            func()
            print()
            print('-' * 20)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,976评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,249评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,449评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,433评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,460评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,132评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,721评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,641评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,180评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,267评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,408评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,076评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,767评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,255评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,386评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,764评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,413评论 2 358

推荐阅读更多精彩内容