python:用pyinstaller做個排列組合的小工具

avatus發表於2018-09-03

排列組合用處很多,所以打算自己做個這個工具:

from scipy.special import comb,perm
from os import system
N=int(input(`NumberOfThings:`))
k=int(input(`NumberOfElementsTaken:`))
print(`從%d裡面取出%d個元素:`%(N,k))
print(`排列:`)
print(perm(N,k,exact=True))#exact T 返回長整,F返回浮點
print(`組合:`)
print(comb(N,k,exact=True))
system(`pause`)

核心就是兩句:

from scipy.special import comb,perm
print(perm(N,k,exact=True))#exact T 返回長整,F返回浮點
print(comb(N,k,exact=True))

真方便,於是跑去用pyinstaller打包……

竟然失敗了,若干支援庫找不到………我擦

趕緊寫個hello world 打個包,看看是不是pyinstaller炸了.

然而一切正常……

嗯,是的,我遇到了pyinstaller不支援的情況了.

怎麼辦呢?自己寫了一個,實現了浮點數運算,可是我想要的是python的長整型啊!!!!.算了,還是去複製黏貼一下吧….於是開啟perm 和 comb的實現部分,開始找程式碼.好坑,組合居然有個函式引用的是pyd裡面的…..,只好原封不動的搬過來了.

於是為了適應pyinstaller的版本出現了:

from _comb import _comb_int

def pailie(N,k):
    if (k > N) or (N < 0) or (k < 0):
        return 0
    val = 1
    for i in range(N - k + 1, N + 1):
        val *= i
    return val
def zuhe(N,k):
    return _comb_int(N, k)

while True:
    ctl=``
    ctl=input(`input 0 to exit,anything else to proceed:`)
    if ctl==`0`:
        break
    N=int(input(`Number of things:`))
    k=int(input(`Number of elements taken`))
    print(`排列:`)
    print(pailie(N,k))
    print(`組合:`)
    print(zuhe(N,k))

把這個原始檔和_comb.cp36-win_amd64.pyd一起從工程裡考出來,找個資料夾塞進去,pyinstaller一下……嘿嘿嘿,成功了.整個綠色軟體10.6兆,好吧,有點肥.

這樣,就有了一個順手的小工具了,哈哈


相關文章