Python实现1-9数组形成的结果为100的所有运算式

问题:

编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34–5 + 67–8 + 9 = 100。

from functools import reduce

operator = {
    1: ‘+‘,
    2: ‘-‘,
    0: ‘‘
}

base = [‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘]

def isHundred(num):

    #转化为8位3进制数,得到运算符数组
    arr = []
    for index in range(8):
        index = 7 - index
        arr.append(num // (3 ** index))
        num -= (num // (3 ** index)) * (3 ** index)
    arr = map(lambda x: operator[x], arr)

    #合并得到运算式
    formula = reduce(lambda x, y: x + y, zip(base, arr))

    formula = list(formula)
    formula.append(‘9‘)

    formula = ‘‘.join(formula)
    #计算运算式结果
    res = eval(formula)
    return res, formula

if __name__ == ‘__main__‘:
    #所有可能的结果
    total = 3 ** 8
    for i in range(total):
        res, formula = isHundred(i)
        if res == 100:
            print(formula+‘ = 100‘)

结果:

/usr/bin/python3.5 /home/kang/workspace/Qt3d/test.py
123+45-67+8-9 = 100
123+4-5+67-89 = 100
123-45-67+89 = 100
123-4-5-6-7+8-9 = 100
12+3+4+5-6-7+89 = 100
12+3-4+5+67+8+9 = 100
12-3-4+5-6+7+89 = 100
1+23-4+56+7+8+9 = 100
1+23-4+5+6+78-9 = 100
1+2+34-5+67-8+9 = 100
1+2+3-4+5+6+78+9 = 100
时间: 2024-12-18 04:20:44

Python实现1-9数组形成的结果为100的所有运算式的相关文章

Python的二维数组

Python一维数组初始化: >>> list=[] >>> type(list) <type 'list'> >>> list [] Python二维数组初始化: >>> lists = [[]] * 3 >>> lists [[], [], []] >>> lists[0].append(3) >>> lists [[3], [3], [3]] "[[]]

初学Python(二)——数组

初学Python(二)——数组 初学Python,主要整理一些学习到的知识点,这次是数组. # -*- coding:utf-8 -*- list = [2.0,3.0,4.0] #计算list长度 print len(list) #第一个元素 print list[0] #最后一个元素 print str(list[-1]) list.append(2.4) list.insert(1,2.7) list.pop(1) list.insert(1,['sdf','sdfdf']) print

python 中字典、数组

a = {"k1":"v1","A":1,"a":2,5:"i5"} a["A"] ="直接修改" a["aa"]="没有的键是新建" del a["a"] #删除一个元素 d.clear() #清空一个字典 1.字典是键值对,没有顺序, 2.键大小写敏感 3.键值可以是混合类型的 b = ["a&

Python学习第二天数组

1:Python定义数组:a=[0,1,2,3,4] ;   打印数组list(a); 这时:a[0]=0, a[1]=1, a[[2]=2...... 1.1:如果想定义一个很长的数组可以用到python函数range a=range(1000)生成1000个元素的一维数组, list(a) 打印数组显示 1.2:给生成的数组赋初始值:a = [0 for x in range(0, 1000)] 0表示初始值  x表示数组中的元素 range(995,1000)表示从995开始生成到1000

python的list和数组的区别

list不是数组(额外安装Pynum) 1)可修改,list数据结构内容可以被程序修改 2)可动态增减,长度不固定 3)list里面的数据项可以是不同类型数据,也可以是list 4)两个list可"链接"(通过+加法)构成一个更大的list Python的list与数组的区别 1)数组一般是固定长度 2)数组通常是在{ }之间,list数据类型名后无{ } 3)数组的各个数据项数据类型必须相同 4)两数组不可直接"链接"构成新的更大数组 https://blog.c

python中list转换为数组

1.list转换为数组 python中list转换为数组的方法为:b = np.array(list) 今天在使用该方法将二维list转换为二维数组时一直不成功,结果仍然是两个list,最后发现是两个list的元素数目不一样导致的,最后修改使两者数目一致,转换成功 list对其元素的类型和各元素所包含的子元素的类型及数目没有要求,这和数组不同,数组要求类型和数目必须相同,所以在将list转换为array时需要注意这一点 2.list与数组的读取 在python中,普通的列表list和numpy中

python将两个数组合并成一个数组的两种方法的代码

内容过程中,把写内容过程中常用的内容收藏起来,下面的资料是关于python将两个数组合并成一个数组的两种方法的内容,希望能对小伙伴们有帮助. c1 = ["Red","Green","Blue"]c2 = ["Orange","Yellow","Indigo"]c1.extend(c2) assert c1 == ["Red","Green",&q

python的二维数组操作

需要在程序中使用二维数组,网上找到一种这样的用法: 1 2 3 4 5 6 #创建一个宽度为3,高度为4的数组 #[[0,0,0], # [0,0,0], # [0,0,0], # [0,0,0]] myList = [[0] * 3] * 4 但是当操作myList[0][1] = 1时,发现整个第二列都被赋值,变成 [[0,1,0], [0,1,0], [0,1,0], [0,1,0]] 为什么...一时搞不懂,后面翻阅The Python Standard Library 找到答案 lis

python 字符串转字节数组

场景: java加解密和python加解密互转的时候,因一些非显示字符无法确认两者是否一致,故需要打出他们的十六进制字节数组进行比较 1.python代码实现 str='123';print str.encode('hex') 结果显示:313233 2. java实现 String str="123"; StringBuffer sbf=new StringBuffer(); for(int i=0;i<str.length();i++){ Integer tmp=(int)s