主要包括:
- 奧特曼大戰小怪獸
- 面向對象方法重構登錄系統
感覺自己還是不是很適應面向對象呀,還是應該多做這方面的練習,寫了一個奧特曼大戰(欺負)小怪獸的小練習:(給奧特曼加了一個大招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 應該還是有可以簡化的地方的