小编Siw*_*wel的帖子

如何构建程序以使用扫雷配置

编辑:这是一段时间以前,我已经开始工作,如果你想看到它包含在github.com/LewisGaul/minegaulerQt的代码.

我正在尝试编写一个程序来计算游戏扫雷的概率,并且在如何最好地构建它时遇到了一些困难.虽然首先使用下面的示例看起来很简单,但我想知道允许更复杂配置的最佳方法.注意我不是在寻找有关如何计算概率的帮助 - 我知道方法,我只需要实现它!

为了清楚我想要计算的内容,我将通过一个简单的例子来完成,这个例子可以手工完成.考虑扫雷配置
# # # #
# 1 2 #
# # # #
,其中#表示未被单击的单元格.该1告诉我们有在最左边的7个未点击的细胞正好1矿山,2告诉我们恰好有2在最右边7.要计算含矿每个单独的小区的概率,我们需要确定所有不同的情况下(仅2在这个简单的情况下):

  1. 在最左边3个细胞中有1个矿井,在最右边3个细胞中有2个矿井(总共3个矿井,3x3 = 9个组合).

  2. 中心4个单元中的1个矿井,最右边3个单元中的1个矿井(总共2个矿井,4x3 = 12个组合).

鉴于矿井在随机单元格中的概率约为0.2,它(在随机选择的单元格中)总共2个地雷的可能性大约是4倍,而不是总共3个,所以地雷总数在配置方面,以及每种配置的组合数量.所以在这种情况下,情况1的概率是9 /(9 + 4x12)= 0.158,因此在给定的最左边单元格中存在矿的概率约为0.158/3 = 0.05,因为这些单元格实际上是等价的(它们分享完全相同的透露邻居).

我用Tkinter创建了一个GUI,它允许我轻松输入配置,例如示例中的配置,它将网格存储为numpy数组.然后我创建了一个NumberGroup类,它隔离了每个被点击/编号的单元格,存储了未被点击的邻居的数量和一组坐标.可以减去这些以获得等价组...虽然如果有三个或更多数字而不是两个数字,这不会那么简单.但我不确定如何从这里获得不同的配置.我玩弄了一Configuration堂课,但我并不十分熟悉不同班级应该如何合作.请参阅下面的工作代码(需要numpy).

注意:我知道我本可以尝试使用蛮力方法,但如果可能的话我想避免这种情况,保持等效组分开(在上面的例子中有3个等价组,最左边3个,中间4个,最右边的3).我想听听你对此的看法.

import numpy as np

grid = np.array(
    [[0, 0, 0, 0],
     [0, 2, 1, 0],
     [0, 0, 0, 0]]
    )
dims = (3, 4) #Dimensions of the grid

class …
Run Code Online (Sandbox Code Playgroud)

python probability minesweeper

12
推荐指数
1
解决办法
629
查看次数

打包许多小部件时的 Tkinter 性能

我正在使用 Tkinter 在 python 中制作 GUI,并且在将许多小部件打包到屏幕上时遇到了一些性能问题,例如打包一个 50x50 的按钮网格需要几秒钟。

似乎是在屏幕上绘制(或排列?)小部件的过程需要时间。我曾尝试同时使用网格和放置几何管理器。

我想知道使用多处理是否可以加快速度?我欢迎任何其他可以显着加快速度的建议。

import Tkinter as tk

root = tk.Tk()
frame = tk.Frame(root)
for i in range(50):
    for j in range(50):
        widget = tk.Frame(frame, bd=2, relief='raised', height=10, width=10)
        widget.grid(row=i, column=j) # using place is barely quicker
tk.Button(root, text='pack', command=frame.pack).pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

python user-interface tkinter python-2.7

5
推荐指数
1
解决办法
2231
查看次数

向元组中的所有值添加整数

在如下所示的代码中编辑元组的推荐/最pythonic方式是什么?

tup_list = [(1, 2), (5, 0), (3, 3), (5, 4)]
max_tup = max(tup_list)
my_tup1 = (max_tup[0] + 1, max_tup[1] + 1)
my_tup2 = tuple(map(lambda x: x + 1, max_tup))
my_tup3 = max([(x+1, y+1) for (x, y) in tup_list])
Run Code Online (Sandbox Code Playgroud)

上述三种方法中哪一种更受欢迎,或者有更好的方法吗?(当然应该(6, 5)在这个例子中返回).

有一种诱惑可以做类似的事情

my_tup = max(tup_list)[:] + 1
Run Code Online (Sandbox Code Playgroud)

要么

my_tup = max(tup_list) + (1, 1)
Run Code Online (Sandbox Code Playgroud)

然而,这些都不明显.

python tuples python-2.7

5
推荐指数
1
解决办法
2887
查看次数

编译numpy没有英特尔MKL/BLAS/ATLAS/LAPACK

我正在使用py2exe转换使用numpy并获得一个非常大的结果文件夹的脚本,并且似乎很多大文件来自numpy我不使用的包的部分,例如numpy.linalg.

为了减少创建的文件夹的大小,我被认为应该在numpy没有英特尔MKL/BLAS/ATLAS/LAPACK的情况下进行编译.

我该怎么做这个改变?

EDIT
C:\Python27\Lib\site-packages\numpy\linalg我发现了以下文件:_umath_linalg.pyd(34MB)和lapack_lite.pyd(18MB),使用时,其被复制到分配的文件夹py2exe.如果可能的话,我想在仍然能够使用numpy数组的同时消除对这些的依赖.包含的另一个大文件位于C:\Python27\Lib\site-packages\numpy\core并被称为_dotblas.pyd(12MB).是否有可能删除它?

python numpy py2exe blas lapack

4
推荐指数
1
解决办法
2730
查看次数