① 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教程請關注環球青藤其它相關文章!