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)