Python3-代码示例

#猜数游戏

# 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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值