

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实战经验。

🌐 前篇文章咱们练习了 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代表实例本身)introduce和grow_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类包含add、subtract、multiply、divide四个方法,分别实现加、减、乘、除运算- 除法方法中添加了对除数为 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)调用父类的初始化方法,复用父类的属性初始化逻辑- 子类可以添加自己特有的属性(如
school、grade)和方法(如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 个实例(四)!
附录:扩展学习资源
- 官方资源:
- Python官网:https://www.python.org
- PyPI:https://pypi.org(查找第三方库)
- 安装包等相关文件(另附带pycharm工具),网盘下载地址:https://pan.quark.cn/s/649af731037c
- 学习资料视频和文档资源,网盘下载地址: https://pan.quark.cn/s/ee16901a8954
- 本专栏特色资源:
- 代码资源仓库: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



