100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Python快速编程入门#学习笔记08# |第8章 :面向对象

Python快速编程入门#学习笔记08# |第8章 :面向对象

时间:2023-08-27 05:21:48

相关推荐

Python快速编程入门#学习笔记08# |第8章 :面向对象

目录

1. 面向对象概述2. 类的定义3.对象的创建与使用类的成员4.属性1、类属性2、实例属性 5.方法1、实例方法2、类方法3、静态方法 6.私有成员 特殊方法7.构造方法8.析构方法 9.封装继承10.单继承11.多继承12.重写 13.多态14.运算符重载实训案例好友管理系统生词本人机猜拳游戏自定义列表阶段案例—银行管理系统

1. 面向对象概述

面向对象是程序开发领域的重要思想,这种思想模拟了人类认识客观世界的思维方式,将开发中遇到的事物皆看作对象

面向过程:

分析解决问题的步骤使用函数实现每个步骤的功能按步骤依次调用函数

面向对象:

分析问题,从中提炼各个对象将不同对象各自的特征和行为进行封装通过控制对象的行为来解决问题

向对象程序设计(英语:Object-oriented programming,缩写:OOP)

面向对象是一种抽象画的编程思想,很多编程语言中都有的一种思想。

例如:洗衣服

思考:几种途径可以完成洗衣服?

答:手洗 和 机洗

手洗: 找盆 - 放水 - 加洗衣粉 - 浸泡 - 搓洗 - 倒水 - 漂洗N次 - 拧干 - 晾晒

机洗: 打开洗衣机 - 放衣服 - 加洗衣粉 - 按下按钮 - 晾晒

思考:对比两种洗衣服方式,你发现了什么?

答:机洗更简单

思考:机洗,只需要有一台洗衣机,加入简单操作就可以完成洗衣服的工作,而不需要关系洗衣机内部发生了什么事情。

总结:面向对象就是将程序当成一个事物,对外界来说,事物是(用户)直接使用的,不用管它内部的情况(厂商创建洗衣机的功能)。而编程就是设置事物能够做什么事。

优点: 面向对象,化简代码,化简逻辑。

2. 类的定义

面向对象编程有两个非常重要的概念:类 和 对象 。对象映射现实中真实存在的事物,如一本书。具有相同的特征和行为的事物的集合统称为。对象时根据类创建的,一个类可以对应多个对象。类是对象的抽象,对是类的实例。

类是对一系列具有相同特征行为的事物的统称,是一个抽象的概念,不是真实存在的事物。

类的名称:大驼峰命名法(首字母一般大写 ,比如Person)类的属性:描述事物的特征,比如 性别。类的方法:描述事物的行为,比如 抬腿。

类比如是制造洗衣机时要用到的图纸,也就是类是用来创建对象。

洗衣机的尺寸 – 变量

洗衣机的功能(排水、烘干)-- 函数

注意:先有类,再有对象

1.定义类

Python2 中有 经典类 和 新式类

语法格式:

class 类名():属性名 = 属性值def 方法名(self):方法体.......

注意:类名要瞒住标识符命名规则,同事遵循大驼峰命名习惯MyName

# 类是对一系列具有相同**特征**和**行为**的事物的统称,是一个抽象的概念,不是真实存在的事物。# 特征即是属性# 行为即是方法# 类比如是制造洗衣机时要用到的图纸,也就是类是用来创建对象。# 洗衣机的尺寸 -- 变量# 洗衣机的功能(排水、烘干)-- 函数# 注意:先有类,再有对象# 1.定义类# Python2 中有 经典类 和 新式类# 语法:'''class 类名():代码......'''# 注意:类名要瞒住标识符命名规则,同事遵循**大驼峰命名习惯** MyName# 需求:洗衣机 功能:能洗衣服class Washer():def wash(self): # 注意:selfprint('洗衣机:能洗衣服')# 2.创建对象 (对象又叫实例)# 语法 对象名 = 类名()haier = Washer() # 创建对象haier.wash() #对象(实例)方法 调用函数

3.对象的创建与使用

对象又叫实例

语法:对象名 = 类名()

# 类是对一系列具有相同**特征**和**行为**的事物的统称,是一个抽象的概念,不是真实存在的事物。# 特征即是属性# 行为即是方法# 类比如是制造洗衣机时要用到的图纸,也就是类是用来创建对象。# 洗衣机的尺寸 -- 变量# 洗衣机的功能(排水、烘干)-- 函数# 注意:先有类,再有对象# 1.定义类# Python2 中有 经典类 和 新式类# 语法:'''class 类名():代码......'''# 注意:类名要瞒住标识符命名规则,同事遵循**大驼峰命名习惯** MyName# 需求:洗衣机 功能:能洗衣服class Washer():def wash(self): # 注意:selfprint('洗衣机:能洗衣服')# 2.创建对象 (对象又叫实例)# 语法 对象名 = 类名()haier = Washer() # 创建对象# 实例方法格式:对象名.实例方法名()haier.wash() #对象(实例)方法 调用函数

类的成员

4.属性

Q: 什么是属性?

A: 属性即是特征,比如:洗衣机的宽度、高度、重量……; 男性、女性……

对象属性既可以在类外面添加和获取,也可以在类里面添加和获取

1、类属性

2、实例属性

1、 类外面

添加对象属性

语法:对象名.属性(变量)名 = 值

haier1.width = 400# 添加对象属性haier1.height = 800

获取对象属性

语法:对象名.属性名

print(f'haier1洗衣机的宽度是:{haier1.width};haier1洗衣机的高度是:{haier1.height}') # 获取对象属性

完整实例如下:

# 3. 添加和获取对象属性# 类外面添加对象属性# 语法:对象名.属性(变量)名 = 值# 体验:class Washer():def wash(self):print('洗衣机:能洗衣服')haier1 = Washer() # 创建对象haier1.wash() # 实例方式haier1.width = 400# 添加对象属性haier1.height = 800# 类外面获取对象属性# 语法:对象名.属性名print(f'haier1洗衣机的宽度是:{haier1.width};haier1洗衣机的高度是:{haier1.height}') # 获取对象属性# 类里面获取对象属性# 语法: self.属性名

2、类里面

类里面添加属性

# 类里面获取对象属性# 语法: self.属性名# 定义类class Washer():# 类里面添加实例(对象)属性width = 400height = 800def print_info(self):# 类里面获取实例(对象)属性print(f'haier1洗衣机的宽度是:{self.width};高度是{self.height}')# 创建对象haier1 = Washer()haier1.print_info() # 调用类里面的函数(实例方法)

输出结果如下:

获取对象属性

语法:self.属性名

# 类里面获取对象属性# 语法: self.属性名# 定义类class Washer():# 添加实例(对象)属性haier1.width = 400haier1.height = 800def print_info(self):# 类里面获取实例(对象)属性print(f'haier1洗衣机的宽度是:{self.width};高度是{self.height}')# 创建对象haier1 = Washer()haier1.print_info() # 调用类里面的函数(实例方法)

运行程序,输出结果如下:

5.方法

Python 中的方法按定义方式和用途可以分为三类:

实例方法类方法静态方法

1、实例方法

实例方法 定义在类内部,形似函数定义以self为第一个形式参数,self参数代表对象本身只能通过对象调用

2、类方法

类方法的特点:

类方法是定义在类内部需要用装饰器@classmethod来表示其为类方法第一个参数cls,代表类本身可以通过对象调用

类方法的使用场景

# 定义类class Dog(object):__tooth = 10 # 私有类属性 __ 前面加两个下划线'__'@classmethoddef get__tooth(cls):return cls.__toothwangcai = Dog() # 创建对象result = wangcai.get__tooth()print(result)

运行程序,输出结果如下:

3、静态方法

静态方法的特点:

需要用修饰器@staticmethod来进行修饰,静态方法既不需要传递类对象,也不需要传递实例对象(形参没有self/cls)没有任何参数静态方法也能够通过对象去调用

静态方法的使用场景:

当方法中既不需要使用实例对象(如实例对象,实例属性),也不需要使用类对象(如类属性、类方法、创建实例等)时,定义静态方法。取消不需要的参数传递,有利于减少不必要的内存占用和性能消耗

class Dog(object):@staticmethod # 修饰器def info_print():print('这是一个静态方法……')# 2.2 创建对象wangcai = Dog()# 2.3 调用静态方法:类 和 对象wangcai.info_print()# 用对象调用静态方法Dog.info_print() # 用类调用静态方法

6.私有成员

类的成员默认公有成员,可以在类的外部通过类或对象随意地访问,这样显然安全

为了保证类中数据的安全,Python 支持将公有成员改为私有成员,在一定程度上限制在类的部对类成员的访问

特殊方法

类中还包括两个特殊方法:构造方法析构方法,这两个方法都是系统内置方法。

7.构造方法

在Python 中__xx__的函数叫做魔法方法,指的是具有特殊功能的函数。

无参数构造方法

有参数构造方法

8.析构方法

多学一招:

9.封装

继承

10.单继承

参数object: 是继承的意思,面向对象语言中都有这样一种特性。继承,指一个对象直接使用另一对象的属性和方法。

注意: 子类不会拥有父类的私有成员,也不能访问父类的私有成员。

11.多继承

答案: 默认第一个

12.重写

13.多态

14.运算符重载

实训案例

好友管理系统

"""好友管理程序增加删除备注展示分组数据存储结构:['王五', '张三', '赵柳', {'家人': ['李四','刘备']},{'同事': ['李龙','张飞']}]""""""好友管理程序增加删除备注展示分组数据存储结构:['王五', '张三', '赵柳', {'家人': ['李四','刘备']},{'同事': ['李龙','张飞']}]"""class Friend:def __init__(self):self.friend_li = []def welcome(self):print("* * 欢迎使用好友管理系统 * * ")print("1:添加好友")print("2:删除好友")print("3:备注好友")print("4:展示好友")print("5:好友分组")print("6:退出")while True:option = input("请选择功能\n")# 添加好友if option == '1':self.add_friend()# 删除好友elif option == '2':self.del_friend()# 备注好友elif option == '3':self.modify_friend()# 展示好友elif option == '4':self.show_friend()# 分组好友elif option == '5':self.group_friend()elif option == '6':break# 添加好友def add_friend(self):add_friend = input("请输入要添加的好友:")self.friend_li.append(add_friend)print('好友添加成功')# 获取所有好友def get_all_friends(self):new_li = []for friend_li_elem in self.friend_li:# 判断元素类型if type(friend_li_elem) == dict:# 遍历字典[new_li.append(dict_elem_name) for dict_elem in friend_li_elem.values()for dict_elem_name in dict_elem]else:new_li.append(friend_li_elem)return new_li# 获取所有分组及其好友def get_all_groups(self):groups = []for friend_li_elem in self.friend_li:if type(friend_li_elem) == dict:groups.append(friend_li_elem)return groups# 获取所有分组名称def get_all_groups_name(self):groups_name = []for dict_elem in self.get_all_groups():for j in dict_elem:groups_name.append(j)return groups_name# 删除好友(在分组中,不在分组中)def del_friend(self):if len(self.friend_li) != 0:del_name = input("请输入删除好友姓名:")# 删除的好友未分组if del_name in self.friend_li:self.friend_li.remove(del_name)print('删除成功')else:# 删除的好友在分组内if del_name in self.get_all_friends():for group_data in self.get_all_groups():for group_friend_li in group_data.values():if del_name in group_friend_li:group_friend_li.remove(del_name)continueprint('删除成功')else:print('好友列表为空')# 备注好友def modify_friend(self):friends = self.get_all_friends()if len(friends) == 0:print('好友列表为空')else:before_name = input("请输入要修改的好友姓名:")after_name = input("请输入修改后的好友姓名:")if before_name in self.friend_li:friend_index = self.friend_li.index(before_name)self.friend_li[friend_index] = after_nameprint("备注成功")elif before_name not in self.friend_li:for friend_li_elem in self.friend_li:if type(friend_li_elem) == dict:for dict_elem in friend_li_elem.values():if before_name in dict_elem:modify_index = dict_elem.index(before_name)dict_elem[modify_index] = after_nameprint('备注成功')# print('备注成功')# 展示好友 (选择展示所有好友,或分组)def show_friend(self):print("1.展示所有好友")print("2.展示分组名称")option_show = input("请输入选项:")groups = self.get_all_groups()friends = self.get_all_friends()if option_show == '1':# 展示所有好友if len(friends) == 0:print("当前没有任何好友")else:print(friends)elif option_show == '2':if len(friends) == 0:print("当前没有任何好友")else:if len(groups) == 0:print("当前没有任何分组")else:# 展示分组for dict_groups in groups:for group_name in dict_groups:print(group_name)is_show_group = input("是否展示组内好友:y/n\n")if is_show_group == 'y':show_group_name = input("请输入查看的分组名称")for i in groups:if show_group_name in i:show_index = groups.index(i)print(groups[show_index][show_group_name])# 分组好友def group_friend(self):create_group = input("是否创建新的分组y/n\n")friends = self.get_all_friends()if create_group == 'y':if len(friends) == 0:print("当前没有任何好友")else:# 请创建分组group_name = input("请输入分组名称:\n")group_name_li = list()# 展示当前好友print(friends)# 移动联系人到哪个组friend_name = input("请输入好友名称:\n")if friend_name in friends:all_friend = []for friend_li_elem in self.friend_li:if type(friend_li_elem) == dict:[all_friend.append(dict_friends) for dict_elem in friend_li_elem.values()for dict_friends in dict_elem]else:all_friend.append(friend_li_elem)if friend_name in all_friend:group_name_li.append(friend_name)self.friend_li.remove(friend_name)# 构建字典: {组名称:分组列表}friend_dict = dict()friend_dict[group_name] = group_name_liself.friend_li.append(friend_dict)else:print("请输入正确的名称")else:print('请输入正确好友名称')elif create_group == 'n':# 显示当前的分组,将用户添加到指定的组current_groups = self.get_all_groups()print('当前分组:')for current_group in current_groups:for group_name in current_group:print(group_name)add_group = input('请选择添加的组:\n')# 判断用户输入的组名是否在当前已存在的分组名中if add_group in self.get_all_groups_name():# 添加好友到指定的组add_name = input('请选择添加的好友名称:\n')# 判断用户输入的好友是否存在好友列表中if add_name in self.friend_li:# 判断用户是否在其他组中if add_name not in current_groups:# 将好友添加到指定的组内add_group_index = self.get_all_groups_name().index(add_group)current_groups[add_group_index][add_group].append(add_name)else:print('该好友已在其他分组中')else:print('请输入正确的组名')if __name__ == '__main__':friend = Friend()friend.welcome()

生词本

程序设计思路:

login.py

import osclass User:# 功能展示def welcome(self):print("欢迎使用生词本")print("1.用户注册")print("2.用户登录")print("3.用户注销")print("4.修改密码")print("5.退出")while True:option = input("请选择功能(登录)\n")# 用户注册if option == '1':self.register()# 用户登录elif option == '2':self.login()# 注销elif option == '3':self.cancel()# 修改密码elif option == '4':self.modify()elif option == '5':print('谢谢使用')break# 将文件中的数据转换为字典def convert_data(self):info_li = []with open('./info.txt', mode='r+', encoding='utf8') as f:info_data = f.readlines()for i in info_data:info_dict = dict()# 替换{ 和 } 并去掉空格step_one = i.replace('{', '').replace('}', '')# 以冒号进行分隔step_two = step_one.split(':')# 拼接字典info_dict["姓名"] = step_two[1].split(',')[0].replace("'", '').strip()info_dict["密码"] = step_two[2].split(',')[0].replace("'", '').strip()# 保存到列表中info_li.append(info_dict)return info_li# 注册def register(self):if os.path.exists('./info.txt') is not True:with open('./info.txt', mode='w', encoding='utf8') as f:f.write('')# 用户名列表name_li = []info_li = self.convert_data()# 接收注册信息person_info = {}name = input("请输入注册用户名:\n")# 获取用户列名列表for i in info_li:name_li.append(i['姓名'])# 判断用户是否存在if name in name_li:print('用户已注册')else:password = input("请输入注册密码:\n")person_info['姓名'] = nameperson_info['密码'] = password# 写入注册信息with open('./info.txt', mode='a+', encoding='utf8') as info_data:info_data.write(str(person_info) + '\n')# 登录def login(self):from 第8章.生词本.recite import ReciteLogicif os.path.exists('./info.txt') is not True:print('当前无数据,请先注册')else:# 用户名列表name_li = []info_li = self.convert_data()name = input("请输入登录用户名:\n")password = input("请输入登录密码:\n")# 获取用户列名列表for i in info_li:name_li.append(i['姓名'])# 判断用户是否存在if name in name_li:# 获取修改用户的索引modify_index = name_li.index(name)# 判断密码是否正确if password == info_li[modify_index]['密码']:print('登录成功')ReciteLogic().welcome(name)else:print('用户名或密码不正确')else:print('用户名或密码不正确')# 注销def cancel(self):if os.path.exists('./info.txt') is not True:print('当前无数据,请先注册')else:cancel_name = input("请输入注销的用户\n")cancel_password = input("请输入密码\n")# 用户名列表name_li = []info_li = self.convert_data()for i in info_li:name_li.append(i['姓名'])if cancel_name in name_li:# 获取注销用户的索引cancel_index = name_li.index(cancel_name)# 判断输入的密码是否正确if cancel_password == info_li[cancel_index]['密码']:info_li.pop(cancel_index)# 写入空数据with open('./info.txt', mode='w+', encoding='utf8') as f:f.write('')for i in info_li:with open('./info.txt', mode='a+', encoding='utf8') as info_data:info_data.write(str(i) + '\n')print('用户注销成功')else:print('用户名或密码不正确')else:print('注销的用户不存在')# 修改密码def modify(self):if os.path.exists('./info.txt') is not True:print('当前无数据,请先注册')else:# 用户名列表name_li = []info_li = self.convert_data()modify_name = input("请输入用户名:\n")password = input("请输入旧密码:\n")# 获取用户列名列表for i in info_li:name_li.append(i['姓名'])# 判断用户是否存在if modify_name in name_li:# 获取修改密码用户的索引modify_index = name_li.index(modify_name)# 判断密码是否正确if password == info_li[modify_index]['密码']:# 修改密码new_password = input("请输入新密码\n")info_li[modify_index]['密码'] = new_passwordwith open('./info.txt', mode='w+', encoding='utf8') as f:f.write('')for i in info_li:with open('./info.txt', mode='a+', encoding='utf8') as info_data:info_data.write(str(i) + '\n')else:print("用户名或密码不正确")else:print("用户名或密码不正确")if __name__ == '__main__':p = User()p.welcome()

recite.py 背诵

import osclass ReciteLogic:def __init__(self):self.user_name =''# 首页def welcome(self, name):self.user_name = nameprint('=' * 20)print(name + '的生词记录本')print('1.查看单词')print('2.背单词')print('3.添加新单词')print('4.删除单词')print('5.清空单词')print('6.退出')print('=' * 20)while True:option = input("请输入功能选项(生词本):\n")if option == '1':self.see_words()elif option == '2':self.recite_words()elif option == '3':self.add_words()elif option == '4':self.del_words()elif option == '5':self.clear_words()elif option == '6':break# 文件中的数据转换为字典def convert_data(self):info_li = []with open('./' + self.user_name + '.txt', mode='r+', encoding='utf8') as f:info_data = f.readlines()for i in info_data:info_dict = dict()# 替换{ 和 } 并去掉空格step_one = i.replace('{', '').replace('}', '')# 以冒号进行分隔step_two = step_one.split(':')en = step_two[0].split(',')[0].replace("'", '').strip()zh = step_two[1].split(',')[0].replace("'", '').strip()info_dict[en] = zh# 保存到列表中info_li.append(info_dict)return info_li# 查看单词def see_words(self):if os.path.exists('./' + self.user_name + '.txt') is not True:print('当前无数据,请先添加单词')else:words_data = self.convert_data()if len(words_data)==0:print("生词本内容为空")else:# 读取文件数据with open('./' + self.user_name + '.txt', mode='r+', encoding='utf8') as f:info_data = f.readlines()for i in info_data:print(i.replace('{', '').replace('}', '').strip())# 背单词def recite_words(self):if os.path.exists('./' + self.user_name + '.txt') is not True:print('当前无数据,请先添加单词')else:words_data = self.convert_data()if len(words_data) == 0:print("生词本内容为空")else:words_li = self.convert_data()# 所有英文单词en_li = []for i in words_li:for j in i.keys():en_li.append(j)# 随机产生的英语单词for random_word in set(en_li):# 获取该单词在en_li中的索引random_word_index = en_li.index(random_word)# 获取该单词所对应的中文words_zh = words_li[random_word_index][random_word]in_words = input("请输入" + random_word + '翻译' + ':\n')# 判断翻译是否正确if in_words ==words_zh:print('太棒了')else:print('再想想')# 添加新单词def add_words(self):if os.path.exists('./' + self.user_name + '.txt') is not True:with open('./' + self.user_name + '.txt', mode='w+', encoding='utf8') as f:f.write('')word_data_dict = dict()new_words = input('请输入新单词:')# 判断输入的单词是否已存在words_li = self.convert_data()# 所有英文单词en_li = []for i in words_li:for j in i.keys():en_li.append(j)if new_words in en_li:print('添加的单词已存在')else:translate = input('请输入单词翻译:')if os.path.exists('./' + self.user_name + '.txt') is not True:with open('./' + self.user_name + '.txt', mode='w', encoding='utf8') as f:f.write('')word_data_dict[new_words] = translatewith open('./' + self.user_name + '.txt', mode='a+', encoding='utf8') as info_data:info_data.write(str(word_data_dict) + "\n")# 删除单词def del_words(self):if os.path.exists('./' + self.user_name + '.txt') is not True:print('当前无数据,请先添加单词')else:words_data = self.convert_data()if len(words_data) == 0:print("生词本内容为空")else:words_li = self.convert_data()# 所有英文单词en_li = []for i in words_li:for j in i.keys():en_li.append(j)del_words = input("请输入要删除的单词:\n")if del_words not in en_li:print('删除的单词不存在')else:# 获取要删除单词的索引del_words_index = en_li.index(del_words)# 删除单词words_li.pop(del_words_index)print('单词删除成功')# 重新写入数据with open('./' + self.user_name + '.txt', mode='w+', encoding='utf8') as f:f.write('')for i in words_li:with open('./' + self.user_name + '.txt', mode='a+', encoding='utf8') as info_data:info_data.write(str(i) + '\n')# 清空单词def clear_words(self):if os.path.exists('./' + self.user_name + '.txt') is not True:print('当前无数据,请先添加单词')else:with open('./' + self.user_name + '.txt', mode='w+', encoding='utf8') as f:f.write('')

人机猜拳游戏

思路:

guess_game.py

import randomclass Player:def __init__(self):self.dict = {0: '剪刀', 1: '石头', 2: '布'}# 手势def gesture(self):player_input = int(input("请输入(0剪刀、1石头、2布:)"))return self.dict[player_input]class AIPlayer(Player):play_data = []def ai_gesture(self):while True:computer = random.randint(0, 2)if len(self.play_data) >= 4:# 获取玩家出拳的最大概率max_prob = max(self.play_data, key=self.play_data.count)if max_prob == '剪刀':return '石头'elif max_prob == '石头':return '布'else:return '剪刀'else:return self.dict[computer]class Game:def game_judge(self):player = Player().gesture()AIPlayer().play_data.append(player)aiplayer = AIPlayer().ai_gesture()if (player == '剪刀' and aiplayer == '布') or \(player == '石头' and aiplayer == '剪刀') \or (player == '布' and aiplayer == '石头'):print(f"电脑出的手势是{aiplayer},恭喜,你赢了!")elif (player == '剪刀' and aiplayer == '剪刀') or \(player == '石头' and aiplayer == '石头') \or (player == '布' and aiplayer == '布'):print(f"电脑出的手势是{aiplayer},打成平局了!")else:print(f"电脑出的手势是{aiplayer},你输了,再接再厉!")def game_start(self):self.game_judge()while True:option = input("是否继续:y/n\n")if option=='y':self.game_judge()else:breakif __name__ == '__main__':g = Game()g.game_start()

自定义列表

custom_list.py

"""from custom_list import MyListadd_demo = MyList(1,2,3,4,5)print(add_demo+5) 每个元素都加5,并返回新的列表"""class MyList:def __isnumber(self, n):if not isinstance(n, (int, float, complex)):return Falsereturn True# 构造函数,进行必要的初始化def __init__(self, *args):for arg in args:if not self.__isnumber(arg):print('所有的元素必须是数字类型')returnself.__value = list(args)def __str__(self):return str(self.__value)def __del__(self):del self.__value# 重载运算符+def __add__(self, num):if self.__isnumber(num):# 数组中所有元素都与数字num相加my_list = MyList()my_list.__value = [elem + num for elem in self.__value]return my_list# 重载运算符-# 数组中每个元素都与数字num相减,返回新数组def __sub__(self, num):if not self.__isnumber(num):print('所有的元素必须是数字类型')returnmy_list = MyList()my_list.__value = [elem - num for elem in self.__value]return my_list# 重载运算符*# 数组中每个元素都与数字num相乘,返回新数组def __mul__(self, num):if not self.__isnumber(num):print('所有的元素必须是数字类型')returnmy_list = MyList()my_list.__value = [elem * num for elem in self.__value]return my_list# 重载运算符/# 数组中每个元素都与数字num相除,返回新数组def __truediv__(self, num):if not self.__isnumber(num):print('所有的元素必须是数字类型')returnmy_list = MyList()my_list.__value = [elem / num for elem in self.__value]return my_list

demo.py

from . custom_list import MyListadd_demo = MyList(1,2,3,4,5)print(add_demo+5)

阶段案例—银行管理系统

admin.py

class Admin:adminU = '1' # 管理员的账号adpwd = '1' # 管理员的密码def printAdminView(self):print("******************************************")print("******")print("******")print("*** 欢迎登录银行系统 ***")print("******")print("******")print("******************************************")def printsysFunctionView(self):print("***********************************************")print("*** ***")print("*** 1.开户(1)2.查询(2) ***")print("*** 3.取款(3)4.存款(4) ***")print("*** 5.转账(5)6.锁定(6) ***")print("*** 7.解锁(7) ***")print("*** ***")print("*** 退出(Q)***")print("*** ***")print("***********************************************")def adminOption(self):adminInput = input("请输入管理员账户:")if self.adminU != adminInput:print("管理员账户输入错误......")return -1passwordInput = input("请输入密码:")if self.adpwd != passwordInput:print("输入密码有误......")return -1else:print("操作成功,请稍后......")return 0

atm.py

from user import Userfrom card import Cardimport randomclass ATM:def __init__(self, alluser):self.alluser = alluserdef randomiCardId(self): # 随机生成开户卡号while True:str_data = '' # 存储卡号for i in range(6): # 随机生成6位卡号ch = chr(random.randrange(ord('0'), ord('9') + 1))str_data += chif not self.alluser.get(str): # 判断卡号是否重复return str_datadef creatUser(self):# 目标向用户字典中添加一个键值对(卡号、用户对象)name = input("请输入姓名:")Uid = input("请输入身份证号:")phone = input("请输入手机号:")prestMoney = float(input("请输入预存金额:"))if prestMoney <= 0:print("预存款输入有误,开户失败")return -1oncePwd = input("请输入密码:")passWord = input("请再次输入密码:")if passWord != oncePwd:print("两次密码输入不同......")return -1print("密码设置成功,请牢记密码: %s " % passWord)cardId = self.randomiCardId()card = Card(cardId, oncePwd, prestMoney) # 创建卡user = User(name, Uid, phone, card) # 创建用户self.alluser[cardId] = user # 存入用户字典print("您的开户已完成,请牢记开户账号: %s" % cardId)def checkpwg(self, realPwd):for i in range(3):psd2 = input("请输入密码:")if realPwd == psd2:return Trueprint("密码输错三次,系统自动退出......")return Falsedef lockCard(self):inptcardId = input("请输入您的卡号:")user = self.alluser.get(inptcardId)if not self.alluser.get(inptcardId):print("此卡号不存在...锁定失败!")return -1if user.card.cardLock:print("该卡已经被锁定,无需再次锁定!")return -1if not self.checkpwg(user.card.cardPwd): # 验证密码print("密码错误...锁定失败!!")return -1user.card.cardLock = Trueprint("该卡被锁定成功!")def searchUser(self, base=1):if base == 2:inptcardId = input("请输入转出主卡号:")elif base == 3:inptcardId = input("请输入转入卡号:")elif base == 1:inptcardId = input("请输入您的卡号:")user = self.alluser.get(inptcardId)# 如果卡号不存在,下面代码就会执行if not self.alluser.get(inptcardId):print("此卡号不存在...查询失败!")return -1if user.card.cardLock:print("该用户已经被锁定...请解卡后使用!")return -1if not self.checkpwg(user.card.cardPwd): # 验证密码print("密码错误过多...卡已经被锁定,请解卡后使用!")user.card.cardLock = Truereturn -1if not base == 3: # 查询转入账户 不打印余额print("账户: %s 余额: %.2f " %(user.card.cardId, user.card.money))return userdef getMoney(self):userTF = self.searchUser()if userTF != -1:if userTF.card.cardId != '':inptMoney = float(input("请输入取款金额:"))if inptMoney > int(userTF.card.money):print("输入的金额大于余额,请先查询余额!")return -1userTF.card.money = \float(userTF.card.money) - inptMoneyprint("取款成功! 账户: %s 余额: %.2f " %(userTF.card.cardId, userTF.card.money))else:return -1def saveMoney(self):userTF = self.searchUser()if userTF != -1:if not userTF.card.cardLock == True:if userTF.card.cardId != '':inptMoney = float(input("请输入要存入得金额:"))if inptMoney < 0:print("请输入正确金额")else:userTF.card.money += inptMoneyprint("存款成功! 账户: %s 余额: %.2f " %(userTF.card.cardId, userTF.card.money))else:return -1def transferMoney(self):MasterTF = self.searchUser(base=2)if (MasterTF == -1):return -1userTF = self.searchUser(base=3)if (userTF == -1):return -1in_tr_Money = float(input("请输入转账金额:"))if MasterTF.card.money >= in_tr_Money:str = input("您确认要继续转账操作吗(y/n)?:")if str.upper() == "Y":MasterTF.card.money -= in_tr_MoneyuserTF.card.money += in_tr_Moneyprint("转账成功! 账户: %s 余额: %.2f " %(MasterTF.card.cardId, MasterTF.card.money))else:print("转账失败,中止了操作")else:print("转账失败,余额不足! 账户: %s 余额: %.2f " %(MasterTF.card.cardId, MasterTF.card.money))def unlockCard(self):inptcardId = input("请输入您的卡号:")user = self.alluser.get(inptcardId)while 1:if not self.alluser.get(inptcardId):print("此卡号不存在...解锁失败!")return -1elif not user.card.cardLock:print("该卡未被锁定,无需解锁!")breakelif not self.checkpwg(user.card.cardPwd):print("密码错误...解锁失败!!")return -1user.card.cardLock = False # 解锁print("该卡 解锁 成功!")break

card.py

class Card:def __init__(self,cardId,cardPwd,money):self.cardId = cardIdself.cardPwd = cardPwdself.money = moneyself.cardLock = False

user.py

class User:def __init__(self, name, id, phone, card):self.name = nameself.id = idself.phone = phoneself.card = card

银行系统.py

from admin import Adminfrom atm import ATMimport timeclass HomePage:def __init__(self):self.allUserD = {} # 使用字典存储数据self.atm = ATM(self.allUserD)self.admin = Admin() # 管理员开机界面def saveUser(self):self.allUserD.update(self.atm.alluser)print("数据存盘成功")def main(self):self.admin.printAdminView()resL = self.admin.adminOption()if not resL:while True:self.admin.printsysFunctionView()option = input("请输入您的操作:")if option not in ("1", "2", "3", "4", "5","6", "7", "S", "Q", "q"):print("输入操作项有误,请仔细确认!")time.sleep(1)if option == "1": # 开户self.atm.creatUser()elif option == "2": # 查询self.atm.searchUser()elif option == "3": # 取款self.atm.getMoney()elif option == "4": # 存储self.atm.saveMoney()elif option == "5": # 转账self.atm.transferMoney()elif option == "6": # 锁定self.atm.lockCard()elif option == "7": # 解锁self.atm.unlockCard()elif option.upper() == "Q":if not (self.admin.adminOption()):self.saveUser()print('退出系统')return -1if __name__ == "__main__":homepage = HomePage()homepage.main()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。