python面向对象练习3

第一题

这是一个电商网站的库存管理问题,我们需要管理商品的库存信息。每个商品都有商品编号、名称和库存数量。

商品编号   商品名称   数量1	   手机      102        电视      53        耳机      20

现在有一个用户购买了商品编号为1的商品5件,需要对库存中的商品数量进行调整,如果库存充足,对外售出,我们会输出减少库存的商品信息,否则,我们会输出库存不足的商品信息。
提示:通过面向对象处理这个问题

  • 属性
    • product_id(商品编号):一个整数,用于唯一标识每个商品。
    • name(商品名称):一个字符串,表示商品的名称。
    • stock(库存数量):一个整数,表示商品的库存数量。
  • 方法:
    • init(self, product_id, name, stock):初始化方法,用于创建商品对象。需要传入商品的编号、名称和库存数量。
    • reduce_stock(self, quantity):减少库存的方法。需要传入一个整数quantity表示要减少的库存数量。如果库存充足,并成功减少库存,返回True;否则返回False。
  • 数据存储
      products = [Product(1, "手机", 10),Product(2, "电视", 5),Product(3, "耳机", 20)]
class Product:def __init__(self, product_id, name, stock):self.product_id = product_idself.name = nameself.stock = stockdef reduce_stock(self, quantity):if self.stock >= quantity:self.stock -= quantityreturn Trueelse:return False# 商品列表
products = [Product(1, "手机", 10),Product(2, "电视", 5),Product(3, "耳机", 20)
]# 购买商品的用户
purchase_product_id = 1
purchase_quantity = 5# 查找商品并尝试减少库存
for product in products:if product.product_id == purchase_product_id:if product.reduce_stock(purchase_quantity):print("成功减少库存:")print("编号:", product.product_id)print("名称:", product.name)print("库存:", product.stock)else:print("库存不足:")print("编号:", product.product_id)print("名称:", product.name)print("库存:", product.stock)break

 第二题

某班级有5名学生,他们的学号、姓名和英语成绩如下表所示,此数据存储在student_scores.txt文件中,请编写一个程序,完成如下功能:

1,计算每个学生的平均成绩。

2,输出平均成绩最高的学生信息。

3,要求使用面向对象完成此需求,即,创建学生对象用于存储学号、姓名、得分,提供计算平均分方法等。

+------+--------+------+------+------+
| 学号 |  姓名   | 语文  | 数学  | 英语 |
+------+--------+------+------+------+
| 001  | 张三   |  85  |  90  |  78  |
| 002  | 李四   |  92  |  88  |  95  |
| 003  | 王五   |  88  |  92  |  85  |
| 004  | 赵六   |  78  |  85  |  90  |
| 005  | 小明   |  95  |  92  |  88  |
+------+--------+------+------+------+

student_scores.txt文本内容如下

学号,姓名,语文,数学,英语
001,张三,85,90,78
002,李四,92,88,95
003,王五,88,92,85
004,赵六,78,85,90
005,小明,95,92,88
class Student:def __init__(self, student_id, name, scores):self.student_id = student_idself.name = nameself.scores = scoresdef get_average_score(self):if len(self.scores) == 0:return 0else:return sum(self.scores) / len(self.scores)# 从文件中读取学生信息和成绩
students = []
with open('student_scores.txt', 'r') as file:lines = file.readlines()[1:]  # 使用切片操作跳过第一行for line in lines:# 此处*scores存储的是后续所有的得分student_id, name, *scores = line.strip().split(',')scores = [int(score) for score in scores]student = Student(student_id, name, scores)students.append(student)# 计算每个学生在不同科目上的平均成绩
for student in students:average_score = student.get_average_score()student.average_score = average_score# 查找平均成绩最高的学生
highest_average_score = max(student.average_score for student in students)
print(highest_average_score)student_list = []
for student in students:if student.average_score == highest_average_score:student_list.append(student)for highest_score_student in student_list:# 输出平均成绩最高的学生信息print("学号:", highest_score_student.student_id)print("姓名:", highest_score_student.name)print("平均成绩:", highest_score_student.average_score)print("")

第三题(难题) 

class BankAccount:def __init__(self, account_number, account_type, balance):self.account_number = account_numberself.account_type = account_typeself.balance = balanceself.transactions = []def deposit(self, amount):if amount > 0:self.balance += amountself.transactions.append(f"存入 {amount} 元。")print(f"成功存入 {amount} 元。当前余额为:{self.balance} 元。")else:print("存款金额必须大于0。")def withdraw(self, amount):if amount > 0:if amount <= self.balance:self.balance -= amountself.transactions.append(f"取出 {amount} 元。")print(f"成功取出 {amount} 元。当前余额为:{self.balance} 元。")else:print("余额不足,取款失败。")else:print("取款金额必须大于0。")def transfer(self, recipient_account, amount):if amount > 0:if amount <= self.balance:self.balance -= amountrecipient_account.deposit(amount)self.transactions.append(f"转账给账户 {recipient_account.account_number} {amount} 元。")print(f"成功转账给账户 {recipient_account.account_number} {amount} 元。")else:print("余额不足,转账失败。")else:print("转账金额必须大于0。")def get_transaction_history(self):print(f"账户 {self.account_number} 的交易历史记录:")for transaction in self.transactions:print(transaction)def __str__(self):return f"账号:{self.account_number}  类型:{self.account_type}  余额:{self.balance}"# 创建账户对象
account1 = BankAccount("123456789", "储蓄账户", 10000)
account2 = BankAccount("987654321", "支票账户", 5000)# 打印账户信息
print(account1)
print(account2)# 进行存款、取款、转账和查看交易历史记录操作
account1.deposit(500)
account1.withdraw(2000)
account2.transfer(account1, 3000)
account1.get_transaction_history()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/744996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端代码整洁与规范之CSS篇

一、代码整洁 1. 命名规范 CSS 类名的命名应该简洁清晰&#xff0c;能够准确描述元素的作用。避免使用无意义的名称&#xff0c;例如“a”、“b”等&#xff0c;而应该使用有意义的英文单词或单词缩写。同时&#xff0c;也要避免使用驼峰命名法和下划线命名法混杂使用&#x…

十大经典排序之选择排序

文章目录 概要整体架构流程代码实现小结 概要 选择排序是一种简单直观的排序算法&#xff0c;无论什么数据进去都是 O(n) 的时间复杂度。所以用到它的时候&#xff0c;数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。 整体架构流程 首先在未排序序列中找到…

NAND闪存市场格局或将发生变化

随着供应商有效减产&#xff0c;内存价格开始反弹&#xff0c;半导体内存市场终于呈现复苏迹象。从市场动态和需求变化来看&#xff0c;作为两大内存产品之一的NAND闪存正经历新一轮变革。 供应商不断采取行动&#xff0c;提高价格并调整产能利用率。自2023年第三季度以来&…

Live800:企业如何与客户建立长期、稳定关系,实现双赢

在当今的商业环境中&#xff0c;企业不仅需要吸引新客户&#xff0c;更需要与现有客户建立长期、稳定的关系。这样的关系可以带来持续的收入&#xff0c;提高企业的利润性。然而&#xff0c;如何建立和维护这样的关系呢&#xff1f;文章将从三个方面进行深入探讨&#xff1a;提…

SpringBoo和vue项目blob传参未生效

学无止境&#xff0c;气有浩然 文章目录 前言展示问题代码问题解决打完收工&#xff01; 前言 工作里做的一个小工具&#xff0c;axios传参&#xff0c;使用FormData传参到后端&#xff0c;没有办法映射除字段值&#xff0c;但是从控制台看&#xff0c;传的字段值都是正确的&a…

Milvus向量数据库检索

官方文档&#xff1a;https://milvus.io/docs/search.md   本节介绍如何使用 Milvus 搜索实体。   Milvus 中的向量相似度搜索会计算查询向量与具有指定相似度度量的集合中的向量之间的距离&#xff0c;并返回最相似的结果。您可以通过指定过滤标量字段或主键字段的布尔表达…

Javaweb-MyBatis

一、概念 MyBatis是一款优秀的持久层框架&#xff0c;用于简化JDBC开发 MyBatis本是Apache的一个开源项目iBatis&#xff0c;2010年这个项目由apache software found迁移到了google code&#xff0c;并且改名为MyBatis。2013年11月迁移到Github 持久层 负责将数据到保存到数…

科技云报道:两会热议的数据要素,如何拥抱新技术?

科技云报道原创。 今年全国两会上&#xff0c;“数字经济”再次成为的热点话题。 2024年政府工作报告提到&#xff1a;要健全数据基础制度&#xff0c;大力推动数据开发开放和流通使用&#xff1b;适度超前建设数字基础设施&#xff0c;加快形成全国一体化算力体系&#xff1…

低代码与数字化工具:重塑软件开发的新范式

随着信息技术的飞速发展&#xff0c;软件开发已成为推动数字化转型的核心力量。在这个变革的时代&#xff0c;低代码与数字化工具逐渐崭露头角&#xff0c;它们不仅简化了开发过程&#xff0c;还大大提高了开发效率&#xff0c;成为推动软件开发领域变革的重要力量。 低代码&am…

面试经典-11-接雨水

题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,…

2024自动化测试的痛点与发展趋势!

前几天在技术交流群里&#xff0c;大家讨论了很多关于自动化测试落地面临的痛点和如何创造价值的话题&#xff0c;颇有感触。 自动化测试这个话题&#xff0c;从出现到在国内大规模开展实践&#xff0c;有很长的一段时间了。早期&#xff0c;大家对自动化测试的理解和使用目的…

java:学生管理系统

一、介绍 该功能是实现学生信息的添加&#xff0c;查看&#xff0c;修改&#xff0c;删除以及退出系统的简单操作。 二、代码实现 public class Student {private String sid;//学号private String name;//姓名private String age;//年龄private String address;//地址publi…

通过NFS 实现windows共享linux目录

一、配置WIndows 1.进入程序和功能 2.勾选NFS服务&#xff0c;安装客户端 二、安装NFS Service 在ubuntu 1.查看apt源是否存在nfs服务端安装包 sudo apt-cache madison nfs-kernel-server 2. 安装nfs-kernel-server sudo apt install nfs-kernel-server 3.建立共享目录&…

Compose UI 之 BottomAppBar 底部应用栏

BottomAppBar 底部应用栏 BottomAppBar 是一个在 Jetpack Compose 中用于创建底部应用栏的组件。它提供了一个高度可定制且功能丰富的底部导航解决方案。 它的使用方式与 TopAppBar 类似。下面的图是 BottomAppBar 的基本样式图。 常见使用场景 BottomAppBar 在应用中常用于…

代码随想录算法训练营第22天 | 235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、450. 删除二叉搜索树中的节点

235. 二叉搜索树的最近公共祖先 题目链接 235. 二叉搜索树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; 思路 因为二叉搜索树是有序的&#xff0c;那么就可以向二分法一样去有向的搜索。 //---------------------------递归法---------------------------// cl…

人工智能课题、模型源码

人工智能研究生毕业&#xff5e;深度学习、计算机视觉、时间序列预测&#xff08;LSTM、GRU、informer系列&#xff09;、python、人工智能项目代做和指导&#xff0c;各种opencv图像处理、图像分类模型&#xff08;vgg、resnet、mobilenet、efficientnet等&#xff09;、人脸检…

ESD静电测试闸机-筑成电子厂防静电管理的第一道防线

ESD静电测试闸机是一种用于防止静电对电子产品和设备造成损害的重要设备。在电子厂等对静电敏感的场所&#xff0c;ESD静电测试闸机扮演着防静电管理的第一道防线的角色&#xff0c;确保生产环境的安全和产品质量的稳定。本文将从静电监测和消除、刷卡/身份证认证、指纹/人脸识…

Tengine编译安装

首先下载源码 可以去官网&#xff1a;The Tengine Web Server 当前最新版地址&#xff1a;https://tengine.taobao.org/download/tengine-3.1.0.tar.gz 安装编译依赖 yum -y install gcc pcre-devel zlib-devel openssl-devel libxml2-devel \libxslt-devel gd-devel GeoIP…

Java的锁机制,线程池机制在项目中应用

Java的锁机制是Java多线程编程中用于保护共享资源的一种机制。Java提供了多种类型的锁&#xff0c;包括synchronized关键字和Lock接口。 synchronized关键字&#xff1a;synchronized关键字可以用于方法或代码块级别的同步。当一个线程进入synchronized块时&#xff0c;它将获得…

一款前端开发工具Hbuilder

背景&#xff1a;最近日在接触前同事留下的一个VUE项目&#xff08;只有前端代码&#xff0c;后台服务压根没写真不知道以前是怎么糊弄过去的&#xff09;时&#xff0c;发现一款可以快速开发前端的软件&#xff1b;今日分享一下。 当我打开项目时发现&#xff0c;有个app.vue…