• Re: python的动态性真是太爽了

    运行瓶颈交给C去解决就好了

    同样的问题的人多了,就形成了库,

    然后大家继续高高兴兴的快糙猛

    【 在 joanzhong (思考者) 的大作中提到: 】

    : 简单易用是以性能为代价的

    : 反射耗cpu耗内存

    : 不过关注性能的也不会用python python快糙猛

    : ...................

    09月30日
  • 练手8-Puzzle,记录一下

    # 可移动位置关系

    cr = {0: (1, 3), 1: (0, 2, 4), 2: (1, 5),

    3: (0, 4, 6), 4: (1, 3, 5, 7), 5: (2, 4, 8),

    6: (3, 7), 7: (4, 6, 8), 8: (5, 7)}

    # 坐标

    ps = {0: (0, 0), 1: (0, 1), 2: (0, 2),

    3: (1, 0), 4: (1, 1), 5: (1, 2),

    6: (2, 0), 7: (2, 1), 8: (2, 2)}

    # steps步骤,puzs搜索过的布局

    steps, puzs = [], []

    # 逆序数

    def inverse(td):

    an = [1 if td[j] > td[i] else 0 for i in range(len(td)) for j in range(i)]

    return sum(an)

    # 获取下一步

    def get_steps(data):

    i0 = data.index(0)

    ds = [data[ci] for ci in cr[i0]]  # 可能的方向

    r, dif = None, 100

    for d in ds:  # 对可能的方向进行处理

    t, id = list(data), data.index(d)

    t[i0], t[id] = t[id], t[i0]

    if tuple(t) in puzs: continue  # 避免重复搜索

    td = comp_differ(t)  # 计算差异度

    # 选择最优——差异度最小的

    if td < dif: dif = td; r = tuple(t)

    # r=tuple(t)   # 随便选

    return r

    # 计算差异度,A*算法

    def comp_differ(data):

    h, m = [], []

    for index, n in enumerate(data):

    if index != n - 1:

    h.append(1)

    else:

    h.append(0)

    if n == 0: continue

    cx, cy = index // 3, index % 3

    x, y = ps[n - 1]

    m.append(abs(cx - x) + abs(cy - y))

    h.pop()

    return sum(h) + sum(m)

    def solve(data):

    # 步骤控制器

    index = 0

    while True:

    if data == (1, 2, 3, 4, 5, 6, 7, 8, 0):

    print('V_V')

    break

    steps.append(data)  # 步骤记录

    # 记录搜索过的布局

    if data not in puzs: puzs.append(data)

    data = get_steps(data)  # 获得下一步

    if data == None:  # 找不到,回退操作步骤

    steps.pop()

    data = steps[-1]

    index = index + 1

    if index > 50000: break  # 超5万步强制退出

    a = (8, 1, 3, 4, 0, 5, 2, 6, 7)

    # a = (8, 1, 3, 4, 0, 2, 7, 6, 5)

    t = list(a)

    t.remove(0)

    if inverse(t) % 2 != 0:

    print('无解')

    else:

    solve(a)

    print(len(steps))

    09月25日
  • 练手八皇后,记录一下

    import itertools

    def solve():

    r = []

    # 通过组合,排除了行列冲突

    for pdata in itertools.permutations((0, 1, 2, 3, 4, 5, 6, 7), 8):

    # 行列的和存在相等,意味着对角线冲突,排除

    t = set((a + b) for a, b in enumerate(pdata))

    if len(t) != 8: continue

    # 行列的差存在相等,意味着对角线冲突,排除

    t = set((a - b) for a, b in enumerate(pdata))

    if len(t) != 8: continue

    # 行、列、对角线冲突都排除了,意味着结果

    r.append(pdata)

    return r

    v = solve()

    print(len(v))

    09月22日
  • Re: 现在PyQT、PySide、Qt for Python关系是?

    小工具tk最方便

    【 在 cat (tiki) 的大作中提到: 】

    : 之前只接触过PyQT,PySide好像后来出来的可以用更宽松的LGPL协议。

    : 刚才搜了下,似乎PySide后面有个PySide2,然后又更新到Qt for Python了。

    : 那么现在想写个小工具在单位里面用(免费,不开源),使用Qt for Python是合适的选择?

    : ...................

    09月21日
  • Re: 坐标的能否存入列表

    [(50,50),(350,50),(50,320),(350,320),(50,590),(350,590)]

    09月18日
  • 发个练手的数独,记录一下

    1.按宫格枚举,宫格标号从左到右,从上到下为0到8

    2.按宫格输入初始数据,空白处为0,前面的0可以省略

    3.初始数据为0,0,0,0,0,0,0,0,0 表示求解全部布局,理论可行,速度受不了

    4.枚举过程非常……繁琐

    记录一下

    import itertools, re, numpy

    class sudoku:

    puz = numpy.arange(81).reshape((9, 9))

    # 宫格的位置

    cp = {0: (0, 3, 0, 3), 1: (0, 3, 3, 6), 2: (0, 3, 6, 9),

    3: (3, 6, 0, 3), 4: (3, 6, 3, 6), 5: (3, 6, 6, 9),

    6: (6, 9, 0, 3), 7: (6, 9, 3, 6), 8: (6, 9, 6, 9)}

    # 宫格间的关联

    cc = {0: ((1, 2), (3, 6)), 1: ((0, 2), (4, 7)), 2: ((1, 0), (5, 8)),

    3: ((4, 5), (0, 6)), 4: ((3, 5), (1, 7)), 5: ((4, 3), (2, 8)),

    6: ((7, 8), (3, 0)), 7: ((6, 8), (4, 1)), 8: ((7, 6), (5, 2))}

    # 宫格备选

    cnss = {0: [], 1: [], 2: [], 3: [], 4: [], 5: [], 6: [], 7: [], 8: []}

    def get_cell_data(self, index):

    p1, p2, p3, p4 = self.cp[index]

    return self.puz[p1:p2, p3:p4]

    def set_cell_data(self, index, data):

    p1, p2, p3, p4 = self.cp[index]

    self.puz[p1:p2, p3:p4] = data

    # 给定数据行方向特征值

    def get_rv(self, data):

    return [data[0, :], data[1, :], data[2, :]]

    # 给定数据列方向特征值

    def get_cv(self, data):

    return [data[:, 0], data[:, 1], data[:, 2]]

    def check(self):

    for i in range(9):

    r_n = set(self.puz[i, :])

    if len(r_n) != 9 or 0 in r_n: return False

    c_n = set(self.puz[:, i])

    if len(c_n) != 9 or 0 in c_n: return False

    else:

    return True

    # 数据初始化

    def init(self, strdata):

    for index, c in enumerate(strdata.split(',')):

    c = c.rjust(9, '0')

    d=[int(x) for x in c]

    nd=numpy.array(d).reshape(3, 3)

    self.set_cell_data(index,nd)

    # 根据宫格自身数据过滤备选

    def filter_by_data(self):

    NP = []

    for i in range(9):

    t=list(itertools.chain.from_iterable(self.get_cell_data(i)))

    c=''.join([str(x) for x in t])

    c=c.replace('0','\d')

    NP.append(re.compile(c))

    for ns in itertools.permutations('123456789', 9):

    t = ''.join(ns)

    for index, p in enumerate(NP):

    if p.fullmatch(t):

    d=[int(x) for x in ns]

    cdata = numpy.array(d).reshape(3, 3)

    self.cnss[index].append(cdata)

    # 根据关联的宫格,过滤备选

    # rc,行相关宫格;cc,列相关宫格;cns,备选

    def gen_cnss(self, rc, cc, cns):

    # 相关宫格形成的行特征值

    rr = [[], [], []]

    for r in rc:

    for i, rx in enumerate(self.get_rv(self.get_cell_data(r))):

    for x in rx: rr[i].append(x)

    # 相关宫格形成的列特征值

    cr = [[], [], []]

    for c in cc:

    for i, cx in enumerate(self.get_cv(self.get_cell_data(c))):

    for x in cx: cr[i].append(x)

    tns = []

    for ns in cns:

    # 当前数据行、列的特征值

    crv,ccv = self.get_rv(ns),self.get_cv(ns)

    for i, (r, c) in enumerate(zip(crv, ccv)):

    if len(set(r) & set(rr[i])) > 0: break;  # 行值冲突

    if len(set(c) & set(cr[i])) > 0: break;  # 列值冲突

    else:

    tns.append(ns)

    return tns

    # 根据宫格关系,重新筛选各宫格的备选

    def filter_by_cells(self):

    for i in range(9):

    rc,cc = self.cc[i][0],self.cc[i][1]

    self.cnss[i] = self.gen_cnss(rc, cc, self.cnss[i])

    def solve(self, s):

    self.init(s)

    # 第1层过滤:根据宫格自身已有数值

    self.filter_by_data()

    # 第2层过滤:根据相关宫格已有数值

    if s!='0,0,0,0,0,0,0,0,0' : self.filter_by_cells()

    print('宫格备选数量:',[len(x) for x in self.cnss.values()])

    # 枚举求解,顺序为4→1,3→0,5,7→2,6→8,

    # 枚举时,筛选后续宫格备选

    for c4 in self.cnss[4]:

    self.set_cell_data(4, c4)

    ns3 = self.gen_cnss((4,), (), self.cnss[3])

    ns1 = self.gen_cnss((), (4,), self.cnss[1])

    if len(ns3) * len(ns1) == 0: continue

    for c3 in ns3:

    self.set_cell_data(3, c3)

    for c1 in ns1:

    self.set_cell_data(1, c1)

    # (3,4)→5;(1,4)→7;(1,3)→0

    ns5 = self.gen_cnss((3, 4), (), self.cnss[5])

    ns7 = self.gen_cnss((), (4, 1), self.cnss[7])

    ns0 = self.gen_cnss((1,), (3,), self.cnss[0])

    if len(ns5) * len(ns7) * len(ns0) == 0: continue

    for c5 in ns5:

    self.set_cell_data(5, c5)

    for c7 in ns7:

    self.set_cell_data(7, c7)

    for c0 in ns0:

    self.set_cell_data(0, c0)

    # (0,1,5)→2;(0,3,7)→6

    ns2 = self.gen_cnss((1, 0), (5,), self.cnss[2])

    ns6 = self.gen_cnss((7,), (3, 0), self.cnss[6])

    if len(ns2) * len(ns6) == 0: continue

    for c2 in ns2:

    self.set_cell_data(2, c2)

    for c6 in ns6:

    self.set_cell_data(6, c6)

    # (2,5,6,7)→8

    ns8=self.gen_cnss((7,6),(5,2),self.cnss[8])

    for c8 in ns8:

    self.set_cell_data(8, c8)

    if self.check(): print(self.puz)

    sd = sudoku()

    # s = '100700000,403000,80025,5094030,620008004,030700590,402003000,82000,800050073'

    s = '736000000,602705,9030081,5368000,86000001,400000308,607090800,10000260,3820040'

    # s = '600803200,5000600,20091000,80000340,400000006,9470000,5090000,8070020,100500'

    # s = '800003070,600090,200,50000000,7045100,700030,1008090,500000,68010400'

    sd.solve(s)

    #sd.solve('0,0,0,0,0,0,0,0,0')

    09月17日
  • 列表的识别问题

    数据列表:

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

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

    模板:

    p1=[0,0,0,4,0,2,0,0,0]

    0表示任意数字

    请问如何用p1快速匹配出d2来?转成字符串然后正则?

    09月16日
  • Re: python破解压缩包密码的问题

    zipfile呢?

    【 在 javame (javame) 的大作中提到: 】

    : 方法是通过调用7z解压,判断返回值是否为0?

    : 可以成功,但是速度太慢。一秒只能验证25个密码。

    : 我设置的6位数字密码,密码是000300,用python

    : ...................

    09月07日
  • Re: Linux 上咋么把Python编译成一个二进制发布呢?

    Nuitka

    【 在 lambdaSeven (lambdaSeven) 的大作中提到: 】

    : 有一些web项目,想编译成二进制发布

    : ...................

    07月03日
  • Re: k30 4g 8-128给k老人用,是不是基本够了?

    redmi8A 4+64,一般都够用,字大音大电池大……

    【 在 SMallBird (我是一只小小鸟) 的大作中提到: 】

    : rt

    06月30日
  • Re: 测试CPU计算速度

    3700U 16G win10

    numpy C : 25003231.021103494

    numpy time : /s 0.06364780000000003

    CPU C : 25003231.02109872

    CPU TIME : /s 70.0155771

    【 在 chh811 (chh) 的大作中提到: 】

    : # 测试CPU计算速度

    : import numpy as np

    : import time

    : ...................

    06月30日
  • 为什么红米10x先出,然后是红米9,这是啥策略……

    rt

    06月28日
  • Re: 请问 python 的 copy 文件夹且覆盖的问题, 急

    win:

    os.system 调用xcopy

    xcopy src des /s /y

    【 在 fanjiyouyi (fanjiyouyi) 的大作中提到: 】

    : 可以

    06月25日
  • 其实红米8A不错的

    5000 ma的电池容量续航够强,

    cpu打小游戏也能扛

    可惜存储容量小了点,没有128G的

    06月15日
  • Re: 如何优雅的生成类似[1,-3,5,-7……]这样的序列

    是,尝试用生成器写了一个,但好像有点重

    import operator

    from itertools import *

    c=starmap(operator.mul,zip(count(1,2),cycle([1,-1])))

    【 在 touzi (猪圈里的野猪) 的大作中提到: 】

    : 生成器不香么?

    06月12日
  • 如何优雅的生成类似[1,-3,5,-7……]这样的序列

    rt

    06月12日
  • Re: python用的多么?

    教育很多,而且会越来越多

    【 在 jacklu (jack) 的大作中提到: 】

    : python用的多么?

    06月06日
  • Re: 传统医学居然认为吃蝙蝠可以治病

    你敢质疑传统医学?胆大

    【 在 analytic (宇之弦) 的大作中提到: 】

    https://mp.weixin.qq.com/s/h3kXhInguFbD9LmtchIdJA

    : 吃普通蝙蝠,则是因为在中药体系中,蝙蝠及其粪便可以治病。

    : 如吃蝙蝠可以治疟疾。《太平御览》引范注《治疟方》:「蝙蝠七枚,合捣五百下。发日鸡鸣服一丸,乩晷一丸。遇发,乃与粥清一升耳。」

    : ...................

    01月29日
  • Re: 北京通报还是只有1例?

    网传北交大农影,我还想上来看看有没有确切消息的

    结果大家都不清楚啊

    【 在 testlll (每天爱你多一点) 的大作中提到: 】

    : 网传第二例是农影小区,

    : 同样参加了人大附的家长会

    : 离第一粒坐的不远

    : ...................

    01月29日
  • Re: 达内python远程培训视频全套转让

    搬个小板凳围观……

    【 在 wenhaifu (wenhaifu) 的大作中提到: 】

    : 本人因工作太忙,没有时间学习,将价值23000的达内python远程培训视频全套超低价转让(肯定低于10000,具体价格面谈)。有意者站内私信,谢谢。

    2018-12-02