当前位置: 首页 > news >正文

(Python)类的练习与巩固(图书管理系统)(类与方法的基础教程)(if条件扩展)(动态类型)(Python教程)

源代码:

class Book:def __init__(self,title,author,publisher,is_borrowed=False):self.title=titleself.author=authorself.publisher=publisherself.is_borrowed=is_borroweddef show_info(self):status="已借出"if self.is_borrowed==True else"未借出"print(f"书名:《{self.title}》")print(f"作者:{self.author}")print(f"出版社:{self.publisher}")print(f"状态:{status}")def borrow_book(self):if self.is_borrowed==False:self.is_borrowed=True print(f"《{self.title}》已经成功借出")else:print(f"抱歉《{self.title}》已经借出,无法再次借出")def return_book(self):if self.is_borrowed==True:self.is_borrowed=Falseprint(f"《{self.title}》已经成功归还")else:print(f"抱歉《{self.title}》未曾借出,无需归还")def is_available(self):if self.is_borrowed==False :print(f"《{self.title}》未曾借出")else:print(f"抱歉《{self.title}》已经借出")python_book = Book("Python入门","张三","编程出版社")
print("初始信息:")
python_book.show_info()
python_book.borrow_book()
print("\n借出后的信息:")
python_book.show_info()
python_book.borrow_book()
python_book.is_available()
python_book.return_book()
python_book.is_available()

代码详解:

练习目标

创建一个 Book 类,实现以下功能:

  1. 初始化图书的基本信息:书名、作者、出版社、当前是否被借出(默认为 “未借出”)
  2. 能打印图书的所有信息
  3. 能修改图书的借出状态(借出 / 归还)
  4. 能查询图书是否可借(如果未借出则可借)

步骤引导

第一步:创建类并定义初始化方法

首先用 class 关键字创建 Book 类,在 __init__ 方法中定义图书的属性:

  • 书名、作者、出版社是必须提供的信息
  • 借出状态有默认值(比如 “未借出”)
class Book:# 初始化方法:self是必须的,代表实例本身def __init__(self, title, author, publisher, is_borrowed=False):# 给实例绑定属性self.title = title          # 书名self.author = author        # 作者self.publisher = publisher  # 出版社self.is_borrowed = is_borrowed  # 是否被借出,默认False(未借出)

(这里用 False 表示未借出,True 表示已借出,后续判断更方便)

第二步:添加打印图书信息的方法

需要一个方法来展示图书的完整信息,包括书名、作者、出版社和借出状态。
方法名可以叫 show_info,记得带 self 参数。

class Book:def __init__(self, title, author, publisher, is_borrowed=False):self.title = titleself.author = authorself.publisher = publisherself.is_borrowed = is_borrowed# 打印图书信息的方法def show_info(self):# 处理借出状态的文字描述status="已借出"if self.is_borrowed==True else"未借出"print(f"书名:《{self.title}》")print(f"作者:{self.author}")print(f"出版社:{self.publisher}")print(f"状态:{status}")
第三步:添加修改借出状态的方法

需要两个方法分别处理 “借出” 和 “归还” 操作:

  • borrow_book():将状态改为 “已借出”
  • return_book():将状态改为 “未借出”
class Book:def __init__(self, title, author, publisher, is_borrowed=False):self.title = titleself.author = authorself.publisher = publisherself.is_borrowed = is_borroweddef show_info(self):status="已借出"if self.is_borrowed==True else"未借出"print(f"书名:《{self.title}》")print(f"作者:{self.author}")print(f"出版社:{self.publisher}")print(f"状态:{status}")# 借出图书的方法def borrow_book(self):if self.is_borrowed==False:  # 如果当前未借出self.is_borrowed = Trueprint(f"《{self.title}》已成功借出!")else:  # 如果已经借出print(f"抱歉,《{self.title}》目前已被借出,无法再次借出。")# 归还图书的方法def return_book(self):if self.is_borrowed==True:  # 如果当前已借出self.is_borrowed = Falseprint(f"《{self.title}》已成功归还!")else:  # 如果本来就未借出print(f"《{self.title}》本来就未借出,无需归还。")
第四步:添加查询可借状态的方法

需要一个方法判断图书是否可借(即当前未借出),返回 True 或 False
方法名可以叫 is_available

class Book:def __init__(self, title, author, publisher, is_borrowed=False):self.title = titleself.author = authorself.publisher = publisherself.is_borrowed = is_borroweddef show_info(self):status="已借出"if self.is_borrowed==True else"未借出"print(f"书名:《{self.title}》")print(f"作者:{self.author}")print(f"出版社:{self.publisher}")print(f"状态:{status}")def borrow_book(self):if if self.is_borrowed==False:self.is_borrowed = Trueprint(f"《{self.title}》已成功借出!")else:print(f"抱歉,《{self.title}》目前已被借出,无法再次借出。")def return_book(self):if if self.is_borrowed==True:self.is_borrowed = Falseprint(f"《{self.title}》已成功归还!")else:print(f"《{self.title}》本来就未借出,无需归还。")# 查询是否可借的方法def is_available(self):if self.is_borrowed==False :print(f"《{self.title}》未曾借出")else:print(f"抱歉《{self.title}》已经借出")
第五步:创建实例并测试

现在我们的 Book 类完成了,来创建一本图书实例,测试所有功能:

# 创建一本图书:《Python入门》,作者"张三",出版社"编程出版社"
python_book = Book("Python入门", "张三", "编程出版社")# 打印图书信息
print("初始信息:")
python_book.show_info()  # 应该显示状态为"未借出"# 尝试借出这本书
python_book.borrow_book()  # 应该提示"已成功借出"# 再次打印信息,确认状态变化
print("\n借出后的信息:")
python_book.show_info()  # 状态应该变为"已借出"# 尝试再次借出(应该失败)
python_book.borrow_book()  # 应该提示"已被借出"# 查询是否可借(此时应该不可借)
python_book.is_available()# 归还图书
python_book.return_book()  # 应该提示"已成功归还"# 再次查询是否可借(此时应该可借)
python_book.is_available()

多说一句(重点代码解析):

status="已借出"if self.is_borrowed==True else"未借出" 什么意思?

这行代码是 Python 的三元表达式,是一种简洁的条件判断写法,作用是根据 self.is_borrowed 的值来给 status 变量赋值。

我们可以拆成普通的 if-else 语句来理解:

# 和这行代码完全等价
if self.is_borrowed == True:status = "已借出"  # 如果条件成立,status 就是"已借出"
else:status = "未借出"  # 如果条件不成立,status 就是"未借出"

进一步简化

因为 self.is_borrowed 本身就是布尔值(True 或 False),所以可以省略 == True,直接写成:

status = "已借出" if self.is_borrowed else "未借出"

意思不变,但更简洁。

三元表达式的格式是:
变量 = 条件成立时的值 if 条件 else 条件不成立时的值

这行代码的目的就是:根据图书是否被借出(self.is_borrowed),用中文文字(“已借出” 或 “未借出”)来描述状态,方便后续打印显示。

False为啥不用定义bool? 

在 Python 中,is_borrowed=False 这样的写法里,False 本身就是 布尔类型(bool)的字面量,不需要专门声明它的类型,这是 Python 的一个重要特性 ——动态类型

具体原因:

  1. Python 是动态类型语言
    和某些静态类型语言(如 Java、C++)不同,Python 不需要在定义变量或参数时声明类型。解释器会自动根据赋值来判断变量的类型。
    比如:

    • is_borrowed=False 中,False 是布尔值,所以 Python 会自动认定 is_borrowed 是布尔类型。
    • 如果你写 x=10,Python 会自动认为 x 是整数;y="hello" 会被认为是字符串。
  2. False 是 Python 内置的布尔值
    True 和 False 是 Python 提前定义好的布尔类型常量,它们本身就代表 “真” 和 “假”,不需要额外定义类型。
    就像 123 是整数、"abc" 是字符串一样,False 天生就是布尔类型。

  3. 参数默认值的作用
    这里的 is_borrowed=False 有两个作用:

    • 设定默认值:如果创建 Book 实例时不提供 is_borrowed 参数,它会自动取 False(未借出)。
    • 暗示类型:虽然不强制,但默认值 False 已经清晰地告诉使用者,这个参数应该传入布尔值(True 或 False)。

举个例子对比:

如果在静态类型语言(如 Java)中,可能需要这样写(明确声明类型):

// Java 代码(需要声明 boolean 类型)
public class Book {boolean isBorrowed;// 构造方法public Book(String title, String author, String publisher, boolean isBorrowed) {this.isBorrowed = isBorrowed;}// 默认值构造方法public Book(String title, String author, String publisher) {this.isBorrowed = false; // 明确 boolean 类型的 false}
}

而 Python 因为动态类型的特性,一行 is_borrowed=False 就同时完成了 “设定默认值” 和 “确定类型” 的功能,更简洁。

简单说就是:Python 会识别 False 是布尔类型,所以不用我们手动声明

f方法介绍:

基本用法

在字符串前加字母 f 或 F,然后用 {} 包裹变量或表达式,Python 会自动计算并替换其中的内容。

示例 1:嵌入变量
name = "小明"
age = 18
# 使用 f-string 拼接变量
info = f"姓名:{name},年龄:{age}"
print(info)  # 输出:姓名:小明,年龄:18
示例 2:嵌入表达式

不仅可以放变量,还能直接放计算、函数调用等表达式:

a = 10
b = 20
# 嵌入算术运算
result = f"{a} + {b} = {a + b}"
print(result)  # 输出:10 + 20 = 30# 嵌入函数调用
text = "hello"
upper_text = f"大写:{text.upper()}"
print(upper_text)  # 输出:大写:HELLO

和其他格式化方式的对比

相比传统的 % 格式化或 str.format(),f - 字符串更简洁直观:

name = "小红"
age = 20# 传统 % 格式化
print("姓名:%s,年龄:%d" % (name, age))# str.format() 方法
print("姓名:{},年龄:{}".format(name, age))# f-string(最简洁)
print(f"姓名:{name},年龄:{age}")

注意事项

  1. 引号冲突:如果字符串内有引号,和外层引号区分开(比如外层用双引号,内层用单引号):

    sentence = f'他说:"我叫{name}"'  # 正确
    
  2. 花括号转义:如果需要在字符串中显示 { 或 },用两个花括号 {{ 或 }}

    print(f"计算结果:{{{a + b}}}")  # 输出:计算结果:{30}
    

f - 字符串是 Python 中最常用的字符串格式化方式,因为它简单、直观且效率高,特别适合在类的方法中拼接属性(比如你之前写的 show_info 方法中就用到了)。

注:该代码是本人自己所写,可能不够好,不够简便,欢迎大家指出我的不足之处。如果遇见看不懂的地方,可以在评论区打出来,进行讨论,或者联系我。上述内容全是我自己理解的,如果你有别的想法,或者认为我的理解不对,欢迎指出!!!如果可以,可以点一个免费的赞支持一下吗?谢谢各位彦祖亦菲!!!!!

http://www.dtcms.com/a/293226.html

相关文章:

  • RDLC报表纵向合并单元格
  • 适配者模式
  • git reset HEAD的实用指南
  • PyQt5—QLabel 学习笔记
  • Python通关秘籍(四)数据结构——列表
  • 发票识别在费控系统应用剖析
  • Linux 重定向和缓冲区
  • 1.两数之和
  • CDN 优化前端打包体积
  • Unity里的加力
  • Linux研学-MySQL安装
  • IP43半加固笔记本L156H
  • Embassy实战:Rust嵌入式异步开发指南
  • 使用docker(ubuntu)搭建web环境(php,apahce2)
  • Vue 3 响应式系统中的 effectScope、watchEffect、effect 和 watch 详解
  • 解锁 Rust 语言:交叉编译与安全防护全攻略
  • Redis - ZSet数据结构与滑动窗口应用
  • 在 WebSocket 中使用 @Autowired 时遇到空指针异常
  • 二、Vue常用指令:v-bind、v-model、v-on
  • 【Python】常见模块及其用法
  • MSTP技术
  • 建造者模式:构建复杂对象的优雅方式
  • c练习-c基础
  • Pulsar存储计算分离架构设计之Broker无状态
  • vscode目录,右键菜单加入用VSCode打开文件和文件夹(快速解决)(含删除)(脚本)
  • gma视角的历史地图集3:自夏至宋3000年5座洛阳城
  • 【锁】MySQL中有哪几种锁?
  • opencv-图像处理
  • 视频编解码技术的未来趋势:从H.266到AI驱动的绿色革命
  • 【AI 学习笔记】Tool Calling:让 AI 不再“纸上谈兵“