判斷一個數是不是7的倍數能夠直接用取餘的方法,判斷一個數中是否含有數字7,這裏提供兩種方法:一種是將數字轉換成字符串,用 in 進行判斷;另外一種是將數字轉換成字符串,用 find 方法,若是不包含會返回 -1。api
代碼以下:數組
def get_num_1(nums):
res = 0
for i in nums:
if i % 7 ==0 or str(i).find('7') != -1:
res +=1
return res
nums = [7,21,34,777,666,888,63]
print(get_num_1(nums))
def get_num_2(nums):
res = 0
for i in nums:
if i % 7 ==0 or '7' in str(i):
res +=1
return res
nums = [7,21,34,777,666,888,63]
print(get_num_2(nums))
複製代碼
更有200本紙質書等,來就送!猛戳>>>*AI充電季,開寶箱免費學正價課,200本紙質書等包郵送!-七月在線 (julyedu.com)開寶箱,100%有獎!markdown
2.揹包問題oop
題目描述:給定物品的重量weights=[1, 2, 5, 6, 7] ,對應的價值values=[1, 6, 18, 22, 28] , 揹包能裝的最大重量爲capicity=11。問:咱們用這個揹包裝什麼物品能得到最大價值? 注意:每件物品只有一件。而且最終重量不能超過揹包所能承載的重量。spa
本題解析參考:www.pianshen.com/article/207…code
分析:orm
首先,說明一下,本題採用動態規劃, 由於問題的自己含最優子結構。 咱們先給出轉態轉移方程:ci
c(i, w) 表示包容量爲w時,考慮前i個物品所能得到的最大價值。。 i表示第i個物品,w表示包容量字符串
第一種狀況: 當前物品的重量超過了包的承載量,顯然裝不上,那它當前的最大價值就是原有包中的價值(不裝這個物品時的最大價值)。get
第二種狀況:當前物品的重量沒有包承載量大。則說明當前這個物品能夠裝進去。 那咱們就得考慮了: 裝這個物品價值大仍是不裝這個物品價值大? 從兩種狀況中選最大的。
右下角的40, 就是咱們所能得到的最大價值
接着,咱們還須要輸出得到最大價值的時候,咱們拿了什麼物品。
從右下角的40開始, 揹包容量爲11,因爲40 與上一行的40相等, 說明咱們沒有裝第五個物品(由於當揹包容量爲11,裝第四個物品的時候,價值已經到達了40)。 緊接着, 在揹包容量爲11時,對應第三個物品,最大價值是25, 因此,咱們裝了第四個物品。 此時,咱們的揹包容量變爲W-w4 即:11-6=5。 因此,對於第三個物品,咱們直接考慮在揹包容量爲5的時候, 能夠看出價值是18,考慮有沒有裝第三個? 由於揹包容量爲5時,第二個物品所對應的最大價值爲7. 因此咱們裝了第三個物品。 接在:W剩 - w3 = 5-5 = 0 。 咱們就能夠得出揹包中裝了第三個和第四個物品。
代碼實現:
# 01 揹包問題
def bag_01(weights, values, capicity):
# [*, *, *, *, *, *, *, *, *, *, *, *]
# [*, *, *, *, *, *, *, *, *, *, *, *]
# [*, *, *, *, *, *, *, *, *, *, *, *]
# [*, *, *, *, *, *, *, *, *, *, *, *]
# [*, *, *, *, *, *, *, *, *, *, *, *]
# [*, *, *, *, *, *, *, *, *, *, *, *]
n = len(values)
f = [[0 for j in range(capicity+1)] for i in range(n+1)]
for i in range(1, n+1):
for j in range(1, capicity+1):
f[i][j] = f[i-1][j]
if j >= weights[i-1] and f[i][j] < f[i-1][j-weights[i-1]] + values[i-1]:
f[i][j] = f[i-1][j-weights[i-1]] + values[i-1]
return f
def show(capicity, weights, f):
n = len(weights)
print("最大價值:", f[n][capicity])
x = [False for i in range(n)]
j = capicity
for i in range(n, 0, -1):
if f[i][j] > f[i-1][j]:
x[i-1] = True
j -= weights[i-1]
print("揹包中所裝物品爲:")
for i in range(n):
if x[i]:
print("第{}個".format(i+1))
if __name__ == '__main__':
# weights 指的是物品的重量
# values 指的是物品的價值
# capicity 指的是袋子能裝的重量
n = 5
weights = [1, 2, 5, 6, 7]
values = [1, 6, 18, 22, 28]
capicity = 11
m = bag_01(weights, values, capicity)
# 打印矩陣
for i in range(len(m)):
print(m[i])
# 接下來輸出要裝的物品
show(capicity, weights, m)
複製代碼
更有200本紙質書等,來就送!猛戳>>>*AI充電季,開寶箱免費學正價課,200本紙質書等包郵送!-七月在線 (julyedu.com)開寶箱,100%有獎!