您的位置:

python背包密码,01背包python代码

本文目录一览:

如何用Python写一个暴力破解加密压缩包的程

有些时候加密rar软件经常会忘了密码,但记得密码的大概,于是乎用Python写个程序来暴力破解吧:

首先要搞清楚如何用命令行来解压缩,经研究,rar软件解压是用的unrar.exe,将这个程序拷贝到C:\windows,然后进入加密软件包所在的文件夹,用命令行运行 下面的命令:

unrar.exe e -pabcd 123.rar

程序就是先前拷到C:\windows,然后参数e是指相对路径,如果在是本文件夹下运行这个命令,则只打文件名就可以了,输入密码的方式是-p后面的字段,假定是abcd,最后面的是要解压的文件名。

下面我们解决如何用Python来运行windows下的命令行

import subprocess

command = 'unrar.exe e -n -pabcd 123.rar'

subprocess.call(command)

这样也可以完成解压,既然这样,那就开干吧,写一个暴力循环,我以4位字母为例,字母加的不全,实际使用可以视情况添加

list1=['a','b','c','d']

list2=['a','b','c','d']

list3=['a','b','c','d']

list4=['a','b','c','d']

for i1 in range(0,len(list1),1):

for i2 in range(0,len(list2),1):

for i3 in range(0, len(list3), 1):

for i4 in range(0, len(list4), 1):

password=list1[i1]+list2[i2]+list3[i3]+list4[i4]

print(password)

command = 'unrar.exe e -n -p' + password + ' 123.rar'

child = subprocess.call(command)

if child == 0:

print('解压密码是:',password)

break

child是返回值,为0表示解压成功,可以挑出循环并打印密码了,我实测,4位纯数字或者字母,只需要十多秒就出来了,非常简单

Python动态背包问题,怎么解决

def bag(n,c,w,v):  

  res=[[-1 for j in range(c+1)] for i in range(n+1)]  

  for j in range(c+1):  

    res[0][j]=0  

  for i in range(1,n+1):  

    for j in range(1,c+1):  

      res[i][j]=res[i-1][j]  

      if j=w[i-1] and res[i][j]res[i-1][j-w[i-1]]+v[i-1]:  

        res[i][j]=res[i-1][j-w[i-1]]+v[i-1]  

  print res  

  return res  

  

def show(n,c,w,res):  

  print '最大价值为:',res[n][c]  

  x=[False for i in range(n)]  

  j=c  

  for i in range(n,0,-1):  

    if res[i][j]res[i-1][j]:  

       x[i-1]=True  

       j-=w[i-1]  

  print('选择的物品为:')  

  for i in range(n):  

    if x[i]:  

      print '第',i,'个,'  

  print('')  

  

if __name__=='__main__':  

  n=5  

  c=10  

  w=[2,2,6,5,4]  

  v=[6,3,5,7,6]  

  res=bag(n,c,w,v)  

  show(n,c,w,res)

输出:[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [-1, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6], [-1, 0, 6, 6, 9, 9, 9, 9, 9, 9, 9], [-1, 0, 6, 6, 9, 9, 9, 9, 11, 11, 14], [-1, 0, 6, 6, 9, 9, 9, 13, 13, 16, 16], [-1, 0, 6, 6, 9, 9, 12, 13, 15, 16, 16]]

最大价值为: 16

选择的物品为:

第 0 个,

第 1 个,

第 3 个,

想问下大神python的背包问题的源代码(最好玩也有伪代码,请用递归法实现),因为只学过递归法,所

递归有层数限制,所以最好不要用,能不用就不用,没有想到什么好的算法,弄了个简单粗暴的,包容量除以最小质量的,就是最多可以装多少个,然后全排列一遍三种商品,并计算价值,取最大的一个价值,代码如下:

a, b, c = 2, 2.5, 3           # 三种商品质量

A, B, C = 4, 5, 6             # 三种商品价值

m = 100                       # 包容量

ds = int(100 / min(a, b, c))  # 最小质量 取到最大数量

mx = 0                        # 最大价值

nl = []                       # 商品数量列表

for i1 in range(0, ds + 1):   # 全排列

    for i2 in range(0, ds + 1 - i1):

        for i3 in range(0, ds + 1 - i1 - i2):

            # 判断总质量 超出则舍弃

            n = i1 * a + i2 * b + i3 * c

            if n  m:

                continue

            # 计算总价值 取最高值及排列并存储

            j = i1 * A + i2 * B + i3 * C

            if mx  j:

                mx = j

                nl = [i1, i2, i3]

# 输出最大价值和组合

print(mx)

print(nl)