python加法乘法代码_Python:乘法转变为加法

简   介

这里     字符串的操作以及加深对乘法的理解

01 有关于学习

无论于大人还是小孩,都需要持续不断的学习。在学习的过程中,最重要的两个因素是阅读力和理解力。阅读力决定了是否会读书以及是否能够优化读书所需要的时间。而理解力决定了是否能够消化理解以及运用阅读到的知识。无论是领导想要把自己从下属中解放出来,还是家长想从辅导孩子之中解放出来,培养下属和孩子这方面的能力不可或缺。

另外关于投入时间和获得知识(技能)的关系曲线方面。T1之前是痛苦期,花费时间多,可以获得的知识却很慢。从T1到T2是快速成长期,入门之后知识累积的速度会迅速加快。而T2之后则是随着知识累积量到了一定程度,即使再投入大量的时间,增加的知识却是很有限。

对于辅导小孩而言,因为什么知识对于小孩都是新的,所以各个方面的知识都会处于T1之前,也就是说要花费大量时间去累积,而小孩获得的知识却很有限。因此,也没有其他的方法,只能慢慢把T1熬过去,等待T1之后的美好的春天。

02 乘法转加法的练习

做这个练习的目的一是学习字符串的各种操作,另一个则是加强对乘法的理解。题目的要求是获得用户一个输入,比如”8*5″,输出则是”8+8+8+8+8=40″。

03 字符串的操作

平时写程序使用的IDE是Pycharm CE。其实练习一些函数的功能的时候,可以使用python自带的IDLE,好处是每一次指令的输入,都可以得到结果的反馈。可以使用函数进行各种尝试,从而加深对函数的理解。

字符串练习的几个要点是:

字符串是特殊的列表,可以使用[position]来获取特定位置的字符

[startingposition : endingposition]来截取一段字符串

字符串正数编号从0开始,倒数编号从-1开始

字符串本身也是一个对象,使用index函数可以获得要查找字符的位置

我们可以使用IDLE来做这些方面的练习。

04 程序设计思路

从输入”8*5″,输出”8+8+8+8+8=40″来看,大体步骤分为:

获得被乘数m1,即8。获得乘数m2,即5。需要注意的是,m1和m2都是字符串类型

获得m1和m2整数转换后的乘积m1m2,即40

构建输出结果字符串

其中,输出的字符串由三部分构成

『8+8+8+8+8』:这部分由m1和m2生成,m1和”+”的个数相差一个,可以把m1+”+”作为一个整体,循环m2-1次,并把结果再加上一个m1

“=”:这就是单纯的一个字符串

“40″: 把整数类型的m1m2转换成字符串即可。

t=input("please input an equation:")p=t.index("*")

m1=t[0:p]

m2=t[p+1:]

m1m2=int(m1)*int(m2)

x=''fori inrange(int(m2)-1):

x=x+m1+"+"x=x+m1

print(x+"="+str(m1m2))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
矩阵乘法是计算机科学中非常基础的一种算法,它在图像处理、人工智能等领域都有广泛的应用。而分治法是一种常见的算法思想,它可以将一个问题分成多个子问题,再将子问题的结果合并起来得到最终结果。本文将介绍如何使用分治法实现矩阵乘法。 首先,我们来回顾一下矩阵乘法的定义。对于矩阵A和B,它们的乘积C的第i行第j列的元素可以表示为: C[i][j] = sum(A[i][k] * B[k][j]), k = 1,2,...,n 其中n为矩阵的大小。 接下来,我们将使用分治法来实现矩阵乘法。具体思路如下: 1.将矩阵A和B分别划分成4个子矩阵,即A11、A12、A21、A22和B11、B12、B21、B22。 2.递归地计算子矩阵的乘积,得到C11、C12、C21和C22。 3.将C11、C12、C21和C22合并成一个大的矩阵C。 下面是Python代码实现: ```python def matrix_multiply(A, B): # 判断矩阵大小是否相等 assert len(A[0]) == len(B) # 矩阵大小为1x1的情况 if len(A) == 1 and len(A[0]) == 1 and len(B) == 1 and len(B[0]) == 1: return [[A[0][0] * B[0][0]]] # 将矩阵A和B分成4个子矩阵 A11, A12, A21, A22 = split_matrix(A) B11, B12, B21, B22 = split_matrix(B) # 递归地计算子矩阵的乘积 C11 = matrix_add(matrix_multiply(A11, B11), matrix_multiply(A12, B21)) C12 = matrix_add(matrix_multiply(A11, B12), matrix_multiply(A12, B22)) C21 = matrix_add(matrix_multiply(A21, B11), matrix_multiply(A22, B21)) C22 = matrix_add(matrix_multiply(A21, B12), matrix_multiply(A22, B22)) # 合并C11、C12、C21和C22成一个大的矩阵C return merge_matrix(C11, C12, C21, C22) def split_matrix(matrix): # 将矩阵按行、列均分为两个子矩阵 n = len(matrix) m = len(matrix[0]) A = [[matrix[i][j] for j in range(m // 2)] for i in range(n // 2)] B = [[matrix[i][j] for j in range(m // 2, m)] for i in range(n // 2)] C = [[matrix[i][j] for j in range(m // 2)] for i in range(n // 2, n)] D = [[matrix[i][j] for j in range(m // 2, m)] for i in range(n // 2, n)] return A, B, C, D def merge_matrix(A, B, C, D): # 将四个子矩阵合并成一个大的矩阵 n = len(A) + len(C) m = len(A[0]) + len(B[0]) matrix = [[0] * m for i in range(n)] for i in range(len(A)): for j in range(len(A[0])): matrix[i][j] = A[i][j] for i in range(len(C)): for j in range(len(C[0])): matrix[i + len(A)][j] = C[i][j] for i in range(len(B)): for j in range(len(B[0])): matrix[i][j + len(A[0])] = B[i][j] for i in range(len(D)): for j in range(len(D[0])): matrix[i + len(A)][j + len(A[0])] = D[i][j] return matrix def matrix_add(A, B): # 矩阵加法 n = len(A) m = len(A[0]) matrix = [[0] * m for i in range(n)] for i in range(n): for j in range(m): matrix[i][j] = A[i][j] + B[i][j] return matrix ``` 可以使用以下代码进行测试: ```python A = [[1, 2], [3, 4]] B = [[5, 6], [7, 8]] C = matrix_multiply(A, B) print(C) # [[19, 22], [43, 50]] ``` 上面的代码实现了分治法实现矩阵乘法的基本思路,但是它的时间复杂度依然是O(n^3),因为我们在合并子问题的结果时需要遍历整个矩阵。实际上,我们可以在递归计算子问题时将子矩阵的结果直接传递到合并函数中,这样可以避免重复计算,从而将时间复杂度优化到O(n^2.81)。感兴趣的读者可以自行了解 Strassen 算法的实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值