① python实现矩阵加法和乘法的方法分析
Python实现矩阵加法和乘法的方法分析
本文实例讲述了Python实现矩阵加法和乘法的方法。分享给大家供大家参考,具体如下:
本来以为python的矩阵用list表示出来应该很简单可以搞。。其实发现有大学问。
这里贴出我写的特别不pythonic的矩阵加法,作为反例。
def add(a, b):
rows = len(a[0])
cols = len(a)
c = []
for i in range(rows):
temp = []
for j in range(cols):
temp.append(a[i][j] + b[i][j])
c.append(temp)
return c
然后搜索了一下资料,果断有个很棒的,不过不知道有没有更棒的。
矩阵加法
def madd(M1, M2):
if isinstance(M1, (tuple, list)) and isinstance(M2, (tuple, list)):
return [[m+n for m,n in zip(i,j)] for i, j in zip(M1,M2)]
矩阵乘法
def multi(M1, M2):
if isinstance(M1, (float, int)) and isinstance(M2, (tuple, list)):
return [[M1*i for i in j] for j in M2]
if isinstance(M1, (tuple, list)) and isinstance(M2, (tuple, list)):
return [[sum(map(lambda x: x[0]*x[1], zip(i,j)))
for j in zip(*M2)] for i in M1]
② Python使用random函数计算100以内加减法,没有题数限制的那种
importrandom
max_n=100
i=0
whileTrue:
i+=1
#随机运算,0+,1-
op=random.randint(0,1)
#+
ifop==0:
x1=random.randint(0,max_n)
x2=random.randint(0,max_n-x1)
result=x1+x2
qst=str(x1)+"+"+str(x2)+"="
question=[qst,result]
#-
elifop==1:
x1=random.randint(0,max_n)
x2=random.randint(0,x1)
result=x1-x2
qst=str(x1)+"-"+str(x2)+"="
question=[qst,result]
x=input("第{:>2d}题:{}".format(i+1,question[0]))
ifint(x)==int(question[1]):
print("回答正确!")
else:
print("回答错误!{}{}".format(question[0],question[1]))
③ Python 基础题急求!
def ingredient(recipes, menu):
....res = []
....for x in range(1,len(recipes)):
........res.append([recipes[x][0],0])
........for y in range(1,len(recipes[0])):
............if recipes[0][y] in my_menu:
................res[x-1][1]+=recipes[x][y]
....return res
④ python题:
1. 欧几里德算法
欧几里德算法又称辗转相除法, 用于计算两个整数a, b的最大公约数。其计算原理依赖于下面的定理:
定理: gcd(a, b) = gcd(b, a mod b)
证明:
a可以表示成a = kb + r, 则r = a mod b
假设d是a, b的一个公约数, 则有 d|a, d|b, 而r = a - kb, 因此d|r。
因此,d是(b, a mod b)的公约数。
加上d是(b,a mod b)的公约数,则d|b, d|r, 但是a = kb + r,因此d也是(a, b)的公约数。
因此,(a, b) 和(a, a mod b)的公约数是一样的,其最大公约数也必然相等,得证。
欧几里德的Python语言描述为:
1
2
3
4
5
6
7
8
9
10
def gcd(a, b):
if a < b:
a, b = b, a
while b != 0:
temp = a % b
a = b
b = temp
return a
2. Stein算法
欧几里德算法是计算两个数最大公约数的传统算法,无论是理论,还是从效率上都是很好的。但是他有一个致命的缺陷,这个缺陷只有在很大的素数时才会显现出来。
考虑现在的硬件平台,一般整数最多也就是64位, 对于这样的整数,计算两个数值就的模很简单的。对于字长为32位的平台,计算两个不超过32位的整数的模,只需要一个指令周期,而计算64位以下的整数模,也不过几个周期而已。但是对于更大的素数,这样的计算过程就不得不由用户来设计,为了计算两个超过64位的整数的模,用户也许不得不采用类似于多位除法手算过程中的试商法,这个过程不但复杂,而且消耗了很多CPU时间。对于现代密码算法,要求计算128位以上的素数的情况比比皆是,设计这样的程序迫切希望能够抛弃除法和取模。
Stein算法由J.Stein 1961年提出,这个方法也是计算两个数的最大公约数。和欧几里德算法不同的是,Stein算法只有整数的移位和加减法,这对于程序设计者是一个福音。
为了说明Stein算法的正确性,首先必须注意到以下结论:
gcd(a, a) = a, 也就是一个数和他自己的公约数是其自身。
gcd(ka, kb) = k * gcd(a, b),也就是最大公约数运算和倍乘运算可以交换,特殊的,当k=2时,说明两个偶数的最大公约数比如能被2整除。
Stein算法的python实现如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
def gcd_Stein(a, b):
if a < b:
a, b = b, a
if (0 == b):
return a
if a % 2 == 0 and b % 2 == 0:
return 2 * gcd_Stein(a/2, b/2)
if a % 2 == 0:
return gcd_Stein(a / 2, b)
if b % 2 == 0:
return gcd_Stein(a, b / 2)
return gcd_Stein((a + b) / 2, (a - b) / 2)
3. 一般求解实现
核心代码很简单:
1
2
3
def gcd(a, b):
if b == 0:return a
return gcd(b, a % b)
附上一个用Python实现求最大公约数同时判断是否是素数的一般方法:
程序如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/env python
def showMaxFactor(num):
count = num / 2
while count > 1:
if num % count == 0:
print 'largest factor of %d is %d' % (num, count)
break #break跳出时会跳出下面的else语句
count -= 1
else:
print num, "is prime"
for eachNum in range(10,21):
showMaxFactor(eachNum)
输出如下:
1
2
3
4
5
6
7
8
9
10
11
largest factor of 10 is 5
11 is prime
largest factor of 12 is 6
13 is prime
largest factor of 14 is 7
largest factor of 15 is 5
largest factor of 16 is 8
17 is prime
largest factor of 18 is 9
19 is prime
largest factor of 20 is 10
⑤ python里面的加法函数怎么写
python交换两个变量的值很简单,a,b = b,a 就可以,写成函数,代码如下:
def jh(a,b):
return b,a
x = 1
y = 2
x,y = jh(x,y)
print(x,y)
执行结果如下:
⑥ python如何相加加法
Python中的列表中的元素不能直接相加减。
最佳的方式是将列表转换成Python中的科学计算包numpy包的array类型,再进行加减。
import
numpy
as
np
a
=
np.array([1,2,3,4])
b
=
np.array([7,8,9,10])
s
=
a
+
b
⑦ 按要求写Python程序计算题
import random
print('a: 加法测试题')
print('b: 乘法测试题')
print('q: 退出')
while True:
a = input('请输入指令(a/m/q): ')
if (a == 'a'):
for __count in range(5):
f = random.randint(1, 100)
s = random.randint(1, 10)
a = input((str(f) + '+' + str(s) + ' = '))
try:
a = int(a)
except:
print('还需要更细心哦!正确答案是' + str((f + s)))
else:
if (a == f + s):
print('回答正确!你真棒!')
else:
print(('还需要更细心哦!正确答案是' + str((f + s))))
elif (a == 'm'):
for __count in range(5):
f = random.randint(1, 100)
s = random.randint(1, 10)
a = input((str(f) + '×' + str(s) + ' = '))
try:
a = int(a)
except:
print('还需要更细心哦!正确答案是' + str((f * s)))
else:
if (a == f * s):
print('回答正确!你真棒!')
else:
print('还需要更细心哦!正确答案是' + str((f * s)))
elif (a == "q"):
print('小明再见!你会回来!')
⑧ 关于python程序设计题的题库
1、average_sum函数的功能为求一批数中大于平均值
sum=0
k=0
for i in range(n):
sum=sum+a[i]
average=sum/n
for i in range:
if(a[i]>average):
k=k+a[i]
return k
2、编写函数fun求一个不多于五位数的正整数的位数
if(m>9999):
place=5
elif(m>999):
place=4
elif(m>99):
place=3
elif(m>9):
place=2
else:
place=1
return place
3、请编fun函数,求4*4整形数组的主对角线元素的和
sum=0.0
for i in range(4):
sum+=a[i][i]
return sum
4、已知:一元钱一瓶汽水,喝完后两个空瓶换一瓶汽水。问:请输入钱数(大于1的正整数),则根据钱数最多可以喝到几瓶汽水。
s=0
k=0
while m>0:
m=m-1
s=s+1
k=k+1
while k>=2:
k=k-2
s=s+1
k=k+1
return s
5、编写函数fun(x,y),函数的功能是若x、y为奇数,求x到y之间的奇数和;若x、y为偶数,则求x到y之间的偶数和。要求必须使用for结构。
主函数的功能是分别计算如下的值:
(1+3+5+……+777)+(2+4+6+……+888)=???
(1+3+5+……+1111)+(2+4+6+……+2222)=???
(1+3+5+……+1999)+(2+4+6+……+1998)=???
s=0
for i in range(x,y+1,2):
s=s+i
return s
6、编写函数main 求3!+6!+9!+12!+15!+18!+21!
s=0
for i in range(3,22,3):
r=1
for j in range(1,i+1):
r*=j
s+=r
print(s)
⑨ python 算加法出现错误
首先,input()得到的是字符串,字符串的相加操作是将两个字符串连接到一起。如果要做数值相加则需要将它们转换为数值类型,如:
num1=int(input('num1:'))
在python3中,print只支持函数式调用,即,只能是print(...)形式。
因此,print a,b,c,d,e这种python2的写法就会产生错误。
而print(a,b,c),d,e在pythonshell中则会解释为输出print()的返回值和d,e这三个值(print()无返回值,即None)。而print(a,b,c)也会产生一个输出,因此就得到了两行输出:
3 + 5
None, = 35
要输出算式,在num1和num2都是数值类型的前提下,可以写成
print(num1, '+', num2, '=', num3)
也可以写成
print('{}+{}={}'.format(num1, num2, num3))
⑩ 如何使用python编程写一个加法计算器
1、打开idle。点击file,然后点击new file.这是创建一个新的文件。
新建一个文件之后,我们输入第一行代码,使用print函数,在屏幕上打印一句话,其中字符串要使用双引号,输入法要使用英文输入法,如果符号使用中文输入法输入,就会出现错误。print("我们做一个两个整数相加的计算题!")
同理,在屏幕上打印第二句话,与用户交互,提醒用户输入第一个数。
第三行调用input函数,将用户输入的内容赋值给a,这时候a收到的是字符串信息,所以需要下一步把字符串转换为整型。这输入计算机处理数据指令。
然后依照以上的步骤写第二个加数,和最后输出的和,注意最后一句打印结果时,引号内部是字符串形式,x+y是数值形式,所以需要在中间加上一个逗号。如果不加逗号就会提示错误信息,以上就是所有的程序编写完成,下一步就开始保存,命名,运行。如图所示
运行结果如下:
更多Python相关技术文章,请访问Python教程栏目进行学习!以上就是小编分享的关于如何使用python编程写一个加法计算器的详细内容希望对大家有所帮助,更多有关python教程请关注环球青藤其它相关文章!