题目:模拟游戏奥特曼打小怪兽
代码如下:
# 模拟一个游戏,有一个怪兽(Monster),还有一个玩家(hero)。
import random as rn
class Sprite:
def __init__(self, name):
self.blood = 100
self.power = 12
self.name = name
def attack(self, monster):
minus = rn.randint(self.power - 5, self.power + 5)
if monster.has_living():
monster.minus_blood(minus)
print(monster.name + ":" + str(monster.blood))
def minus_blood(self, num):
self.blood -= num
def has_living(self):
if self.blood > 0:
return True
return False
m = Sprite('哥斯拉')
h = Sprite('奥特曼')
while m.has_living() and h.has_living():
m.attack(h)
h.attack(m)
if m.has_living():
print(m.name + '获得胜利')
if h.has_living():
print(h.name + '获得胜利')
用面向对象思路解决前面用函数解决的登录注册问题
# 用面向对象的思维完成一个注册登录系统
class User:
"""一个用户类"""
def __init__(self, username, pwd):
self.username = username
self.pwd = pwd
def __str__(self):
return self.username
class DB:
"""
单例模式
"""
instance = None
def __new__(cls, *args, **kwargs):
"""为了实现单例"""
if DB.instance is None:
DB.instance = super().__new__(cls)
return DB.instance
def __init__(self):
self._pool = []
def sava_user(self, user):
"""
存储数据
:return:
"""
self._pool.append(user)
def get_user_by_username(self, username):
"""
查找数据
:param username:用户名
:return:
"""
for user in self._pool:
if username == user.username:
return user
return None
def get_all(self):
return self._pool[:]
class View:
"""
读取用户信息
"""
def show_info(self, info):
opt = input(info)
return opt
def read_regiseter_info(self):
username = input('请输入用户名(长度6-9):\n')
if 6 > len(username) or len(username) > 9:
print('用户名不合法!')
return None
pwd = input('请输入密码(长度6-9):\n')
if 6 > len(pwd) or len(pwd) > 9:
print('密码不合法!')
return None
return User(username, pwd)
def show_user_list(self, users):
"""
展示用户信息
:param users:
:return:
"""
for user in users:
print(user)
class Service:
def __init__(self):
self.db = DB()
def regiser(self, user):
exist_user = self.db.get_user_by_username(user.username)
if exist_user is not None:
return print("该用户已存在")
self.db.sava_user(user)
print('用户注册成功')
def login(self, user):
exist_user = self.db.get_user_by_username(user.username)
if exist_user is None:
print('用户名不存在')
return None
if exist_user.pwd == user.pwd:
print("登录成功\n")
return exist_user
else:
print("密码错误")
return None
def list(self):
return self.db.get_all()
class App:
def __init__(self):
self.v = View()
self.s = Service()
self.cur_user = None
def start(self):
while True:
view_opt = self.v.show_info(" (1)注册 \n (2)登录 \n (3) 退出 \n 请选择要进行的操作:")
if view_opt == '1':
user = self.v.read_regiseter_info()
if user is not None:
self.s.regiser(user)
if view_opt == '2':
user = self.v.read_regiseter_info()
login_user = self.s.login(user)
if login_user is not None:
self.cur_user = login_user
self.show_home()
def show_home(self):
while True:
user_opt = self.v.show_info("请选择要进行的操作:\n (1)查看用户信息 \n (2)查看用户列表 \n (3) 退出")
if user_opt == '1':
print(self.cur_user)
if user_opt == '2':
# 查看用户列表
users = self.s.list()
print(type(users))
self.v.show_user_list(users)
if user_opt == '3':
break
app = App()
app.start()
实现一个监控程序
## 模拟监控服务:观察者模式
## 程序,每隔5秒向服务器发送请求,看是否获取正常返回,如果返回正常,则继续监控,否则向维护人员发送短信
import time
from random import randint
class Server:
"""
服务器的功能是求两个数的和
"""
def __init__(self, name):
self.name = name
self.times = randint(3,10)
def action(self):
self.times -= 1
return self.times
class Monitor:
def __init__(self, server):
self.server = server
def monitor(self):
while True:
s = self.server.action()
if s < 3 or s > 10:
print('向维护人员发送信息')
break
else:
print('服务器正常,无需发送信息')
time.sleep(5)
while True:
s = Server('test')
m = Monitor(s)
m.monitor()
网友评论