关注

Python入门:Python3基础练习题详解,从入门到熟练的 25 个实例(三)

在这里插入图片描述

在这里插入图片描述

Python入门:Python3基础练习题详解,从入门到熟练的 25 个实例(三)

Python入门:Python3基础练习题详解,从入门到熟练的 25 个实例(三),本文是Python3进阶练习题(51-75题)的详解教程,涵盖条件语句、循环控制、递归、类与对象等知识点。文中对每道题都提供了具体代码实现和详细解释,包括用if-else判断数的正负、while循环打印1到10、for循环遍历列表、递归计算阶乘与斐波那契数列、打印九九乘法表、判断特殊数字(如快乐数、水仙花数),以及创建类和子类、实现计算器类、银行账户类、矩阵类等。通过这些练习可帮助学习者巩固基础,提升Python实践能力。

在这里插入图片描述

前言

    Python作为一门简洁、易读、功能强大的编程语言,其基础语法是入门学习的核心。掌握好基础语法,能为后续的编程实践打下坚实的基础。本文将全面讲解Python3的基础语法知识,适合编程初学者系统学习。Python以其简洁优雅的语法和强大的通用性,成为当今最受欢迎的编程语言。本专栏旨在系统性地带你从零基础入门到精通Python核心。无论你是零基础小白还是希望进阶的专业开发者,都将通过清晰的讲解、丰富的实例和实战项目,逐步掌握语法基础、核心数据结构、函数与模块、面向对象编程、文件处理、主流库应用(如数据分析、Web开发、自动化)以及面向对象高级特性,最终具备独立开发能力和解决复杂问题的思维,高效应对数据分析、人工智能、Web应用、自动化脚本等广泛领域的实际需求。

在这里插入图片描述


在这里插入图片描述

🥇 点击进入Python入门专栏,Python凭借简洁易读的语法,是零基础学习编程的理想选择。本专栏专为初学者设计,系统讲解Python核心基础:变量、数据类型、流程控制、函数、文件操作及常用库入门。通过清晰示例与实用小项目,助你快速掌握编程思维,打下坚实根基,迈出自动化办公、数据分析或Web开发的第一步。

🥇 点击进入Python小游戏实战专栏, 寓教于乐,用Python亲手打造经典小游戏!本专栏通过开发贪吃蛇、飞机大战、猜数字、简易版俄罗斯方块等趣味项目,在实践中掌握Python核心语法、面向对象编程、事件处理、图形界面(如Pygame)等关键技能,将枯燥的代码学习转化为可见的成果,让学习编程充满乐趣与成就感,快速提升实战能力。

🥇 点击进入Python小工具实战专栏,告别重复劳动,用Python打造效率神器!本专栏教你开发文件批量处理、自动邮件通知、简易爬虫、桌面提醒、密码生成器、天气查询等实用小工具。聚焦os、shutil、requests、smtplib、schedule等核心库,通过真实场景案例,快速掌握自动化脚本编写技巧,解放双手,显著提升工作与生活效率,让代码真正服务于你的日常。

🥇 点击进入Python爬虫实战专栏,解锁网络数据宝库!本专栏手把手教你使用Python核心库(如requests、BeautifulSoup、Scrapy)构建高效爬虫。从基础网页解析到动态页面抓取、数据存储(CSV/数据库)、反爬策略应对及IP代理使用,通过实战项目(如电商比价、新闻聚合、图片采集、舆情监控),掌握合法合规获取并利用网络数据的核心技能,让数据成为你的超能力。

🥇 点击进入Python项目实战专栏,告别碎片化学习,挑战真实项目!本专栏精选Web应用开发(Flask/Django)、数据分析可视化、自动化办公系统、简易爬虫框架、API接口开发等综合项目。通过需求分析、架构设计、编码实现、测试部署的全流程,深入掌握工程化开发、代码复用、调试排错与团队协作核心能力,积累高质量作品集,真正具备解决复杂问题的Python实战经验。


Python入门:Python3基础练习题详解,从入门到熟练的 25 个实例(三)


🌐 前篇文章咱们练习了 Python3基础练习题详解,从入门到熟练的 25 个实例(二) ,如果忘记了,可以去重温一下,不停的重复敲击基础代码,有助于让你更加熟练掌握一门语言。今天咱们继续,八篇教程练习题实例 ,Python3基础练习题详解,从入门到熟练的 25 个实例(三),下面开始吧!

大家好!本文将为大家带来 Python3 进阶练习题(51-75题)的详细解析和代码实现。这些题目涵盖了条件语句、循环控制、递归、函数、类与对象等多个知识点,非常适合有一定基础的 Python 学习者巩固提升。下面我们逐一讲解:

51. 实现 if-else 语句

功能:判断一个数是正数、负数还是零。

num = float(input("请输入一个数字: "))
if num > 0:
    print("这是一个正数")
elif num == 0:
    print("这个数是零")
else:
    print("这是一个负数")

控制台输出

在这里插入图片描述

解释

  • 使用 if-elif-else 结构进行多条件判断
  • 先判断是否为正数,再判断是否为零,最后剩下的就是负数
  • 通过 input() 函数获取用户输入,并转换为浮点型以便处理小数

52. 使用 while 循环打印 1 到 10

功能:利用 while 循环从 1 打印到 10。

# 初始化计数器
num = 1
# while 循环条件:num 小于等于 10
while num <= 10:
    print(num)
    # 计数器自增
    num += 1

控制台输出

在这里插入图片描述

解释

  • 先初始化计数器 num 为 1
  • while 循环在 num <= 10 时执行循环体
  • 每次循环打印当前 num 的值,并将其加 1,直到 num 大于 10 时退出循环

53. 用 for 循环遍历列表中的所有元素

功能:遍历并打印列表中的每个元素。

# 定义一个列表
fruits = ["苹果", "香蕉", "橙子", "葡萄", "西瓜"]
# 使用 for 循环遍历列表
for fruit in fruits:
    print(fruit)

控制台输出

在这里插入图片描述

解释

  • Python 的 for 循环可以直接遍历列表中的每个元素,无需使用索引
  • 循环变量 fruit 会依次取列表 fruits 中的每个值
  • 这种遍历方式简洁明了,是 Python 中推荐的做法

54. 计算一个数字的反转

功能:将一个整数反转(如 123 反转后为 321)。

def reverse_number(n):
    # 记录数字的符号
    sign = 1
    if n < 0:
        sign = -1
        n = -n
    
    reversed_num = 0
    while n > 0:
        # 取最后一位数字
        last_digit = n % 10
        # 将最后一位数字添加到反转数的末尾
        reversed_num = reversed_num * 10 + last_digit
        # 移除最后一位数字
        n = n // 10
    
    return sign * reversed_num

# 测试
print(reverse_number(12345))  # 输出: 54321
print(reverse_number(-9876))  # 输出: -6789

控制台输出

在这里插入图片描述

解释

  • 先处理数字的符号,将负数转为正数处理
  • 使用取模运算 n % 10 获取最后一位数字
  • 使用整除运算 n // 10 移除最后一位数字
  • 反转后的数字乘以原符号,得到最终结果

55. 使用 break 和 continue 控制循环

功能:演示 break(跳出循环)和 continue(跳过本次循环)的用法。

# 使用 break:找到第一个能被 7 整除的数就停止
for i in range(1, 100):
    if i % 7 == 0:
        print(f"找到第一个能被7整除的数: {i}")
        break  # 跳出循环

# 使用 continue:打印 1-20 中所有不能被 3 整除的数
print("1-20中不能被3整除的数:")
for i in range(1, 21):
    if i % 3 == 0:
        continue  # 跳过本次循环
    print(i, end=" ")

控制台输出

在这里插入图片描述

解释

  • break 用于立即终止当前循环,跳出循环体
  • continue 用于跳过当前循环中的剩余语句,直接进入下一次循环
  • 合理使用这两个关键字可以使循环控制更灵活

56. 使用递归计算阶乘

功能:用递归方法计算 n 的阶乘(n! = n × (n-1) × … × 1)。

def factorial(n):
    # 递归终止条件:0! = 1,1! = 1
    if n == 0 or n == 1:
        return 1
    # 递归调用:n! = n × (n-1)!
    else:
        return n * factorial(n - 1)

# 测试
print(factorial(5))  # 输出: 120 (5×4×3×2×1)
print(factorial(0))  # 输出: 1

控制台输出

在这里插入图片描述

解释

  • 递归函数必须有明确的终止条件,这里是 n == 0 or n == 1
  • 递归函数通过调用自身解决规模更小的问题(n-1 的阶乘)
  • 阶乘的递归关系:n! = n × (n-1)!

57. 判断一个数是否为完全平方数

功能:判断一个数是否是某个整数的平方(如 16 是 4 的平方,是完全平方数)。

import math

def is_perfect_square(n):
    if n < 0:
        return False  # 负数不可能是完全平方数
    # 计算平方根并取整
    sqrt_n = int(math.isqrt(n))
    # 判断平方后是否等于原数
    return sqrt_n * sqrt_n == n

# 测试
print(is_perfect_square(16))  # 输出: True
print(is_perfect_square(25))  # 输出: True
print(is_perfect_square(12))  # 输出: False

解释

  • 负数不可能是完全平方数,直接返回 False
  • 使用 math.isqrt() 计算整数平方根(Python 3.8+ 可用)
  • 如果平方根的平方等于原数,则该数是完全平方数

58. 使用递归打印斐波那契数列

功能:用递归方法打印斐波那契数列的前 n 项(斐波那契数列:1, 1, 2, 3, 5, 8…,前两项为 1,之后每项是前两项之和)。

def fibonacci(n):
    # 递归终止条件
    if n == 1 or n == 2:
        return 1
    # 递归关系:第n项 = 第n-1项 + 第n-2项
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)

# 打印前10项斐波那契数列
for i in range(1, 11):
    print(fibonacci(i), end=" ")  # 输出: 1 1 2 3 5 8 13 21 34 55

解释

  • 斐波那契数列的递归终止条件:第 1 项和第 2 项都为 1
  • 递归关系:fibonacci(n) = fibonacci(n-1) + fibonacci(n-2)
  • 注意:递归方法计算斐波那契数列效率较低,实际应用中更推荐使用循环

59. 写一个程序打印九九乘法表

功能:打印完整的九九乘法表。

# 外层循环控制行数(1-9)
for i in range(1, 10):
    # 内层循环控制每行的列数(1-i)
    for j in range(1, i + 1):
        # 格式化输出,确保对齐
        print(f"{j}×{i}={i*j}", end="\t")
    # 每行结束后换行
    print()

控制台输出

在这里插入图片描述

解释

  • 外层循环变量 i 表示乘数,从 1 到 9
  • 内层循环变量 j 表示被乘数,从 1 到 i
  • 使用 \t 制表符确保输出对齐
  • 每行打印完成后使用 print() 换行

60. 判断一个字符串是否包含数字

功能:检查一个字符串中是否包含至少一个数字字符。

def has_digit(s):
    # 遍历字符串中的每个字符
    for char in s:
        # 检查字符是否为数字
        if char.isdigit():
            return True
    return False

# 测试
print(has_digit("hello123"))  # 输出: True
print(has_digit("world"))     # 输出: False
print(has_digit("456test"))   # 输出: True

解释

  • 使用 for 循环遍历字符串中的每个字符
  • 调用字符串方法 isdigit() 检查字符是否为数字
  • 一旦找到数字就返回 True,全部检查完仍未找到则返回 False

61. 输出九九乘法表的某一行

功能:根据用户输入的行数,输出九九乘法表中对应的那一行。

# 获取用户输入的行数
row = int(input("请输入要打印的行数(1-9): "))

# 检查输入是否合法
if 1 <= row <= 9:
    # 循环打印该行的所有乘法式
    for j in range(1, row + 1):
        print(f"{j}×{row}={j*row}", end="\t")
else:
    print("输入不合法,请输入1-9之间的整数")

控制台输出

在这里插入图片描述

解释

  • 先获取用户输入并转换为整数
  • 检查输入是否在 1-9 的有效范围内
  • 若有效,则循环打印该行的所有乘法式(被乘数从 1 到行数)
  • 若无效,提示用户输入错误

62. 使用循环打印正方形

功能:根据指定边长,用星号 * 打印正方形。

def print_square(size):
    # 外层循环控制行数
    for i in range(size):
        # 内层循环控制每行的星号数量
        for j in range(size):
            print("*", end="")
        # 每行结束后换行
        print()

# 打印一个5x5的正方形
print_square(5)

输出结果

*****
*****
*****
*****
*****

解释

  • 外层循环执行 size 次,控制正方形的行数
  • 内层循环每次执行 size 次,打印 size 个星号
  • 内层循环结束后换行,开始下一行的打印

63. 判断一个数字是否为 Armstrong 数(自恋数)

功能:判断一个数是否为 Armstrong 数(一个 n 位数,其各位数字的 n 次方之和等于该数本身)。

def is_armstrong_number(n):
    # 处理0的情况
    if n == 0:
        return True
    
    # 计算数字的位数
    temp = n
    digits = 0
    while temp > 0:
        temp = temp // 10
        digits += 1
    
    # 计算各位数字的digits次方之和
    temp = n
    sum_of_powers = 0
    while temp > 0:
        digit = temp % 10
        sum_of_powers += digit **digits
        temp = temp // 10
    
    # 判断是否为Armstrong数
    return sum_of_powers == n

# 测试
print(is_armstrong_number(153))  # 输出: True (1³+5³+3³=1+125+27=153)
print(is_armstrong_number(9474)) # 输出: True (9⁴+4⁴+7⁴+4⁴=6561+256+2401+256=9474)
print(is_armstrong_number(123))  # 输出: False

解释

  • 首先计算数字的位数 digits
  • 然后计算各位数字的 digits 次方之和
  • 最后判断该和是否等于原数,若是则为 Armstrong 数

64. 计算1到100的和并输出其中偶数的和

功能:计算 1 到 100 的所有整数之和,以及其中所有偶数的和。

# 初始化总和和偶数和
total_sum = 0
even_sum = 0

# 循环1到100的所有数
for num in range(1, 101):
    total_sum += num
    # 判断是否为偶数
    if num % 2 == 0:
        even_sum += num

# 输出结果
print(f"1到100的总和为: {total_sum}")
print(f"1到100中偶数的和为: {even_sum}")

输出结果

1到100的总和为: 5050
1到100中偶数的和为: 2550

解释

  • 使用 range(1, 101) 生成 1 到 100 的所有整数
  • 每次循环都将当前数字加到 total_sum
  • 通过 num % 2 == 0 判断是否为偶数,若是则加到 even_sum
  • 最终输出两个计算结果

65. 找到一个数的所有因子

功能:找出一个正整数的所有因子(能整除该数的正整数)。

def find_factors(n):
    if n <= 0:
        return []  # 非正整数没有因子
    
    factors = []
    # 只需要检查到n的平方根即可
    for i in range(1, int(n**0.5) + 1):
        if n % i == 0:
            factors.append(i)
            # 如果i不是n的平方根,添加对应的另一个因子
            if i != n // i:
                factors.append(n // i)
    
    # 对因子进行排序
    return sorted(factors)

# 测试
print(find_factors(12))  # 输出: [1, 2, 3, 4, 6, 12]
print(find_factors(17))  # 输出: [1, 17] (17是质数)

解释

  • 因子是成对出现的,例如 12 的因子对有 (1,12)、(2,6)、(3,4)
  • 只需检查到该数的平方根即可找到所有因子对,提高效率
  • 最后对因子列表排序,使结果更直观

66. 打印一个列表中的所有奇数

功能:遍历列表,打印出所有的奇数。

def print_odd_numbers(numbers):
    print("列表中的奇数有:")
    for num in numbers:
        # 判断是否为奇数
        if num % 2 != 0:
            print(num, end=" ")
    print()  # 换行

# 测试
numbers_list = [12, 35, 9, 47, 56, 72, 83, 99]
print_odd_numbers(numbers_list)  # 输出: 35 9 47 83 99

解释

  • 遍历列表中的每个元素
  • 使用 num % 2 != 0 判断是否为奇数(不能被 2 整除)
  • 打印所有满足条件的奇数

67. 计算一个数的每个数字之和

功能:计算一个整数的各位数字之和(如 123 的各位数字之和为 1+2+3=6)。

def sum_of_digits(n):
    # 处理负数,转为正数
    n = abs(n)
    total = 0
    # 循环提取每个数字
    while n > 0:
        # 取最后一位数字
        digit = n % 10
        total += digit
        # 移除最后一位数字
        n = n // 10
    return total

# 测试
print(sum_of_digits(1234))   # 输出: 10 (1+2+3+4)
print(sum_of_digits(-567))   # 输出: 18 (5+6+7)
print(sum_of_digits(0))      # 输出: 0

解释

  • 先使用 abs(n) 处理负数,确保后续计算正确
  • 使用 n % 10 提取最后一位数字,加到总和中
  • 使用 n // 10 移除最后一位数字
  • 重复上述过程,直到所有数字都被处理

68. 打印一个倒三角形的星号图案

功能:根据指定行数,用星号 * 打印倒三角形。

def print_reverse_triangle(rows):
    # 外层循环控制行数,从rows递减到1
    for i in range(rows, 0, -1):
        # 内层循环控制每行的星号数量
        for j in range(i):
            print("*", end="")
        # 每行结束后换行
        print()

# 打印一个5行的倒三角形
print_reverse_triangle(5)

输出结果

*****
****
***
**
*

解释

  • 外层循环使用 range(rows, 0, -1) 生成从 rows 到 1 的递减序列,控制倒三角形的行数
  • 内层循环每次执行 i 次(i 为当前行数),打印 i 个星号
  • 内层循环结束后换行,形成倒三角形的形状

69. 判断数字是否为“快乐数”

功能:判断一个数是否为快乐数(快乐数是指将该数替换为其各位数字的平方和,重复此过程,最终得到 1 的数)。

def is_happy_number(n):
    # 用于记录已经出现过的数字,避免无限循环
    seen = set()
    
    while n != 1 and n not in seen:
        # 将当前数字加入集合
        seen.add(n)
        # 计算各位数字的平方和
        n = sum(int(digit)** 2 for digit in str(n))
    
    # 如果最终结果是1,则是快乐数
    return n == 1

# 测试
print(is_happy_number(19))  # 输出: True (1²+9²=82 → 8²+2²=68 → ... → 1)
print(is_happy_number(4))   # 输出: False (4 → 16 → 37 → ... → 4,形成循环)

解释

  • 快乐数的判断需要重复计算数字各位的平方和,直到结果为 1 或进入循环
  • 使用集合 seen 记录已出现的数字,若数字再次出现则说明进入循环,不是快乐数
  • 若最终结果为 1,则该数是快乐数

70. 判断一个数是否为水仙花数

功能:判断一个三位数是否为水仙花数(水仙花数是指一个三位数,其各位数字的立方和等于该数本身)。

def is_narcissistic_number(n):
    # 水仙花数是三位数,先判断范围
    if not (100 <= n <= 999):
        return False
    
    # 提取百位、十位、个位数字
    hundreds = n // 100
    tens = (n // 10) % 10
    units = n % 10
    
    # 计算各位数字的立方和
    sum_of_cubes = hundreds **3 + tens** 3 + units ** 3
    
    # 判断是否等于原数
    return sum_of_cubes == n

# 测试
print(is_narcissistic_number(153))  # 输出: True (1³+5³+3³=1+125+27=153)
print(is_narcissistic_number(370))  # 输出: True (3³+7³+0³=27+343+0=370)
print(is_narcissistic_number(123))  # 输出: False

解释

  • 水仙花数特指三位数,因此先判断输入是否在 100-999 范围内
  • 分别提取百位(n//100)、十位((n//10)%10)、个位(n%10)数字
  • 计算三个数字的立方和,若等于原数则为水仙花数

71. 创建一个类并实例化它

功能:定义一个简单的 Person 类,包含属性和方法,并实例化该类。

class Person:
    # 初始化方法,设置属性
    def __init__(self, name, age):
        self.name = name  # 姓名属性
        self.age = age    # 年龄属性
    
    # 定义方法:介绍自己
    def introduce(self):
        print(f"大家好,我叫{self.name},今年{self.age}岁。")
    
    # 定义方法:年龄增长
    def grow_up(self):
        self.age += 1
        print(f"{self.name}长大了一岁,现在{self.age}岁了。")

# 实例化Person类
person1 = Person("张三", 20)
person2 = Person("李四", 25)

# 调用对象的方法
person1.introduce()  # 输出: 大家好,我叫张三,今年20岁。
person2.grow_up()    # 输出: 李四长大了一岁,现在26岁了。

解释

  • class Person: 定义一个名为 Person 的类
  • __init__ 是初始化方法,用于创建对象时初始化属性(self 代表实例本身)
  • introducegrow_up 是类的方法,用于实现对象的行为
  • 通过 类名(参数) 实例化对象(如 Person("张三", 20)),并调用其方法

72. 使用 Python 实现一个简单的计算器类

功能:创建一个 Calculator 类,支持加、减、乘、除四种运算。

class Calculator:
    # 加法
    def add(self, a, b):
        return a + b
    
    # 减法
    def subtract(self, a, b):
        return a - b
    
    # 乘法
    def multiply(self, a, b):
        return a * b
    
    # 除法(处理除数为0的情况)
    def divide(self, a, b):
        if b == 0:
            return "错误:除数不能为0"
        return a / b

# 创建计算器实例
calc = Calculator()

# 测试运算
print("3 + 5 =", calc.add(3, 5))        # 输出: 3 + 5 = 8
print("10 - 4 =", calc.subtract(10, 4)) # 输出: 10 - 4 = 6
print("6 × 7 =", calc.multiply(6, 7))   # 输出: 6 × 7 = 42
print("8 ÷ 2 =", calc.divide(8, 2))     # 输出: 8 ÷ 2 = 4.0
print("5 ÷ 0 =", calc.divide(5, 0))     # 输出: 5 ÷ 0 = 错误:除数不能为0

解释

  • Calculator 类包含 addsubtractmultiplydivide 四个方法,分别实现加、减、乘、除运算
  • 除法方法中添加了对除数为 0 的判断,避免程序出错
  • 实例化后通过 对象.方法名() 调用运算方法,传入参数即可得到结果

73. 使用继承创建一个子类

功能:基于 Person 类(见第71题)创建一个 Student 子类,继承父类属性并添加新属性和方法。

# 父类:Person
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def introduce(self):
        print(f"我叫{self.name},今年{self.age}岁。")

# 子类:Student(继承自Person)
class Student(Person):
    # 子类的初始化方法
    def __init__(self, name, age, school, grade):
        # 调用父类的初始化方法
        super().__init__(name, age)
        # 添加子类特有的属性
        self.school = school  # 学校
        self.grade = grade    # 年级
    
    # 重写父类的introduce方法
    def introduce(self):
        print(f"我叫{self.name},今年{self.age}岁,在{self.school}{self.grade}年级。")
    
    # 子类特有的方法:学习
    def study(self, subject):
        print(f"{self.name}正在学习{subject}。")

# 实例化子类
student1 = Student("王五", 15, "阳光中学", "高一")

# 调用方法
student1.introduce()  # 输出: 我叫王五,今年15岁,在阳光中学上高一年级。
student1.study("数学") # 输出: 王五正在学习数学。

解释

  • 子类通过 class Student(Person): 声明继承自 Person
  • super().__init__(name, age) 调用父类的初始化方法,复用父类的属性初始化逻辑
  • 子类可以添加自己特有的属性(如 schoolgrade)和方法(如 study
  • 子类可以重写父类的方法(如 introduce),实现更具体的功能

74. 实现一个银行账户类,支持存款和取款

功能:创建 BankAccount 类,支持查看余额、存款、取款等操作。

class BankAccount:
    # 初始化账户,设置账号和初始余额(默认为0)
    def __init__(self, account_number, balance=0):
        self.account_number = account_number  # 账号(不可修改)
        self.balance = balance                # 余额
    
    # 查看余额
    def check_balance(self):
        print(f"账号{self.account_number}的当前余额为:{self.balance}元")
        return self.balance
    
    # 存款
    def deposit(self, amount):
        if amount > 0:
            self.balance += amount
            print(f"存款成功!存入{amount}元,当前余额:{self.balance}元")
        else:
            print("存款金额必须大于0")
    
    # 取款
    def withdraw(self, amount):
        if amount <= 0:
            print("取款金额必须大于0")
        elif amount > self.balance:
            print("余额不足,取款失败")
        else:
            self.balance -= amount
            print(f"取款成功!取出{amount}元,当前余额:{self.balance}元")

# 创建账户实例
account = BankAccount("6222021234567890123", 1000)

# 测试操作
account.check_balance()  # 输出: 账号6222021234567890123的当前余额为:1000元
account.deposit(500)     # 输出: 存款成功!存入500元,当前余额:1500元
account.withdraw(300)    # 输出: 取款成功!取出300元,当前余额:1200元
account.withdraw(2000)   # 输出: 余额不足,取款失败

解释

  • BankAccount 类包含 account_number(账号)和 balance(余额)两个属性
  • check_balance 方法用于查看当前余额
  • deposit 方法用于存款,需判断存款金额是否为正数
  • withdraw 方法用于取款,需判断取款金额是否为正数及余额是否充足
  • 通过这些方法实现对银行账户的基本操作,确保资金操作的合理性

75. 实现一个基于类的矩阵类

功能:创建 Matrix 类,支持矩阵的基本表示、形状查看和矩阵加法。

class Matrix:
    # 初始化矩阵,接收二维列表作为参数
    def __init__(self, data):
        # 验证输入是否为有效的矩阵(每行长度相同)
        row_length = len(data[0]) if data else 0
        for row in data:
            if len(row) != row_length:
                raise ValueError("矩阵的所有行必须具有相同的长度")
        self.data = data  # 矩阵数据(二维列表)
    
    # 查看矩阵形状(行数×列数)
    def shape(self):
        rows = len(self.data)
        cols = len(self.data[0]) if rows > 0 else 0
        return (rows, cols)
    
    # 矩阵加法(仅当两个矩阵形状相同时可相加)
    def __add__(self, other):
        # 检查是否为Matrix实例
        if not isinstance(other, Matrix):
            raise TypeError("只能与Matrix实例相加")
        
        # 检查形状是否相同
        if self.shape() != other.shape():
            raise ValueError("两个矩阵必须具有相同的形状才能相加")
        
        # 计算加法结果
        result = []
        for i in range(len(self.data)):
            row = []
            for j in range(len(self.data[i])):
                row.append(self.data[i][j] + other.data[i][j])
            result.append(row)
        
        return Matrix(result)
    
    # 重写字符串表示,便于打印
    def __str__(self):
        return "\n".join(str(row) for row in self.data)

# 创建矩阵实例
matrix1 = Matrix([[1, 2, 3], [4, 5, 6]])
matrix2 = Matrix([[7, 8, 9], [10, 11, 12]])

# 查看形状
print("matrix1形状:", matrix1.shape())  # 输出: matrix1形状:(2, 3)

# 矩阵加法
matrix3 = matrix1 + matrix2
print("matrix1 + matrix2 的结果:")
print(matrix3)

输出结果

matrix1形状: (2, 3)
matrix1 + matrix2 的结果:
[8, 10, 12]
[14, 16, 18]

解释

  • __init__ 方法接收二维列表作为矩阵数据,并验证矩阵的有效性(每行长度相同)
  • shape 方法返回矩阵的形状(行数, 列数)
  • __add__ 方法重写加法运算符,实现矩阵加法(对应元素相加),需先验证两个矩阵的形状是否相同
  • __str__ 方法重写字符串表示,使矩阵打印更直观
  • 矩阵加法仅在两个矩阵形状相同时有效,否则会抛出异常

总结

本文涵盖了 Python 中条件语句、循环控制、递归、函数、类与对象等核心知识点的练习题(51-75题)。通过这些题目的练习,可以帮助大家巩固 Python 基础,并提升代码实践能力。每个题目都包含详细的代码实现和解释,希望能为大家的 Python 学习之路提供帮助!

如果有任何疑问或改进建议,欢迎在评论区留言交流~

💡下一篇咱们学习 Python3基础练习题详解,从入门到熟练的 25 个实例(四)!

附录:扩展学习资源

  1. 官方资源
  2. 本专栏特色资源
    • 代码资源仓库:CSDN专属资源在线获取
    • 海量Python教程:关注公众号:xcLeigh,获取网盘地址
    • 一对一答疑:添加微信与博主在线沟通(备注“Python专栏”

联系博主

    xcLeigh 博主全栈领域优质创作者,博客专家,目前,活跃在CSDN、微信公众号、小红书、知乎、掘金、快手、思否、微博、51CTO、B站、腾讯云开发者社区、阿里云开发者社区等平台,全网拥有几十万的粉丝,全网统一IP为 xcLeigh。希望通过我的分享,让大家能在喜悦的情况下收获到有用的知识。主要分享编程、开发工具、算法、技术学习心得等内容。很多读者评价他的文章简洁易懂,尤其对于一些复杂的技术话题,他能通过通俗的语言来解释,帮助初学者更好地理解。博客通常也会涉及一些实践经验,项目分享以及解决实际开发中遇到的问题。如果你是开发领域的初学者,或者在学习一些新的编程语言或框架,关注他的文章对你有很大帮助。

    亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

     愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

    至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


     💞 关注博主 🌀 带你实现畅游前后端!

     🏰 大屏可视化 🌀 带你体验酷炫大屏!

     💯 神秘个人简介 🌀 带你体验不一样得介绍!

     🥇 从零到一学习Python 🌀 带你玩转Python技术流!

     🏆 前沿应用深度测评 🌀 前沿AI产品热门应用在线等你来发掘!

     💦 :本文撰写于CSDN平台,作者:xcLeigh所有权归作者所有)https://xcleigh.blog.csdn.net/,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


在这里插入图片描述

     📣 亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(或者关注下方公众号,看见后第一时间回复,还有海量编程资料等你来领!),博主看见后一定及时给您答复 💌💌💌

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/weixin_43151418/article/details/150383519

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--