关于面向对象的练习
2019-05-31 本文已影响0人
Vector_Wan
主要包括:
- 奥特曼大战小怪兽
- 面向对象方法重构登录系统
感觉自己还是不是很适应面向对象呀,还是应该多做这方面的练习,写了一个奥特曼大战(欺负)小怪兽的小练习:(给奥特曼加了一个大招buffer )充钱玩家,充钱玩家,,,怪兽基本上活不过三轮,,,
主要是使用到了类的继承
# @Time : 2019/5/25 17:13
# @Author : Vector_Wan
# @Email : 995626309@qq.com
# File : 奥特曼大战小怪兽.py
# Software: PyCharm
import random as rn
class Sprit(object):
def __init__(self, name):
self.blood = 100
self.power = 12
self.name = name
def atteck(self, monster):
minus = rn.randrange(self.power - 5, self.power + 5)
if monster.is_living():
monster.blood = monster.minus_blood(minus)
print(monster.name+':\t'+str(monster.blood))
def is_living(self):
if self.blood > 0:
return True
else:
return False
def minus_blood(self, num):
return self.blood - num
class Hero(Sprit):
def bug_atteck(self, monster):
monster.blood = monster.minus_blood(monster.blood)
def atteck(self, monster):
super().atteck(monster)
if rn.randint(0,3) == 1:
print(self.name + "使用了道具")
self.bug_atteck(monster)
class Monster(Sprit):
pass
if __name__ == '__main__':
h = Hero("奥特曼")
m = Monster("哥斯拉")
while m.is_living() and h.is_living():
m.atteck(h)
h.atteck(m)
if m.is_living():
print(m.name + "获得胜利")
if h.is_living():
print(h.name + "获得胜利")
第二部分主要是使用面向对象方法重构了一下用户登录系统:不解释了,就是想把代码保存到云端,,,不过里面还是有一些python语法糖和小技巧的~~
目标:实现用户登录、注册、查询等功能。
# @Time : 2019/5/30 15:09
# @Author : Vector_Wan
# @Email : 995626309@qq.com
# File : 使用面向对象方法重构登录系统.py
# Software: PyCharm
class User(object):
def __init__(self, name = 'default', pass_word = 'default'):
self.__name = name
self.__pass_word = pass_word
@property
def name(self):
return self.__name
@name.setter
def name(self, name):
if len(name) > 0 and len(name) < 10:
self.__name = name
else:
self.__pass_word = 'default'
@property
def pass_word(self):
return self.__pass_word
@pass_word.setter
def pass_word(self, pass_word):
if len(pass_word) > 0 and len(pass_word) < 10:
self.__pass_word = pass_word
else:
self.__pass_word = 'default'
class Account(object):
def __init__(self):
# 用户列表,数据格式:[user对象,user对象,user对象]
self.uers_list = []
def log_in(self):
'''
登录程序,输入用户名和密码然后去self.user_list中校验用户合法性
:return:
'''
while True:
print('***** 用户登录 *****\n')
name = input('请输入用户名:\n')
pwd = input('请输入密码:\n')
user = self.name_in_list(name)
if user == None:
print('用户名不存在!\n是否注册一个用户? Y/N?')
if input().upper() == 'Y':
self.register()
if user.pass_word != pwd:
print(user.pass_word)
print(pwd)
print('用户名或密码错误!\n')
continue
break
print('登录成功!欢迎 ', name, '\n')
while True:
dic = {'1': self.log_out, '2': self.read_data}
print('''
***** 用户菜单 *****
1.注销用户
2.查看信息''')
a = input('请选择(1 / 2):')
if dic.get(a) == None:
print('输入有误!请重新输入!')
continue
dic.get(a)(name)
def name_in_list(self, name):
'''
用于判断用户名是否在用户列表中,
:return: 如果存在返回这个对象,否则什么都不返回(None)
'''
for i in range(len(self.uers_list)):
if name == self.uers_list[i].name:
return self.uers_list[i]
return None
def name_is_ok(self, strs):
'''
本函数用于判断用户输入的用户名或密码是否合法
:param strs: 用户名或密码(字符串)
:return: 合法:True 不合法: False
'''
if len(strs) > 0 and len(strs) < 10:
return True
return False
def register(self):
'''
注册函数
:return:
'''
while True:
print('***** 用户注册 *****\n')
name = input('请输入用户名:\n')
if not (self.name_is_ok(name)):
print('用户名不合法请输入 0 ~ 10位字符\n')
continue
if not(self.name_in_list(name) == None):
print('该用户名已存在请重新输入:\n')
continue
pwd = input('请输入密码:\n')
if not (self.name_is_ok(pwd)):
print('密码不合法请输入 0 ~ 10位字符\n')
continue
break
user = User(name, pwd)
self.uers_list += [user]
print('注册成功!')
while True:
dic = {'1': self.log_out, '2': self.read_data}
print('''
***** 用户菜单 *****
1.注销用户
2.查看信息''')
a = input('请选择(1 / 2):')
if dic.get(a) == None:
print('输入有误!请重新输入!')
continue
dic.get(a)(name)
def log_out(self, name):
'''
下线函数
:return:
'''
print('您已成功注销,再见! ', name)
self.run()
def read_data(self, name):
'''
查看用户信息函数
:return:
'''
user = self.name_in_list(name)
print('\n***********')
print('当前用户信息:')
print('您的用户名为:', user.name)
print('您的密码为:', user.pass_word)
def run(self):
"""
主程序
:return:
"""
while True:
dic = {'1': self.register, '2': self.log_in}
print('''
***** 主菜单 *****
1.注册
2.登陆''')
a = input('请选择(N/n退出):')
if a.upper() == 'N':
return
if dic.get(a) == None:
print('输入有误!请重新输入!')
continue
dic.get(a)()
if __name__ == '__main__':
obj = Account()
obj.run()
over 应该还是有可以简化的地方的