判断一个数是不是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%有奖!