天天看點

python學習——day03

本文參與「少數派讀書筆記征文活動」https://sspai.com/post/45653

前兩天回家了,今天繼續(果然還是學校學習動力比較足233333)

pyInstaller庫(第三方庫):

利用可執行檔案執行.py程式(打包)->不需要python解釋器及配置環境(第三方庫使用前需要額外安裝,利用pip工具)

python學習——day03

補充:

參數 -y,--nocomfirm -n,Name,--name Name --distpath DIR --hidden-import ModuleName -w,-windowed,--noconsole --version-file File
描述 不詢問 打包後檔案名 指定打包位置 打包隐藏的子產品 有GUI的程式可以不提供指令行界面 加入版本檔案

安裝步驟:

  1. 下載下傳pip(https://pypi.org/project/pip/#files)
  2. (cmd指令行)進入pip解壓目錄,輸入指令:python setup.py install

    補充:

    1)  pip更新子產品 pip install -U [PackageName]

    2)  pip解除安裝子產品 pip uninstall [PackageName]

    3)  檢視pip已安裝的庫 pip list

  3. 我因為沒有安裝setuptools,是以還要先安裝setuptools再執行前1、2步(下載下傳setuptools:https://pypi.org/project/setuptools/#files;安裝:進入setuptools解壓目錄,輸入指令:python setup.py install )
  4. 配置pip環境變量(電腦->屬性->進階系統設定->環境變量->系統變量->Path->變量值末尾添加python的Scripts路徑[D:\Program Files (x86)\Python\Python36-32\Scripts])

    注意:如果目前環境安裝的是python2,則Scripts檔案中會有pip和pip2;是python3的話,就是pip和pip3,雖然pip.exe和pip2/3的效果是一樣的,但是指令行執行時,隻能識别pip2/3。

  5. (cmd指令行)pip install pyinstaller

    注意:python2.7安裝pyinstaller可能會出錯,應該是SSL連接配接的問題,安裝更高版本的python就可以解決。

    備注:如果使用的是pycharm IDE,有兩種安裝第三方資料庫的方法(推薦使用方法一)

    1)  通過指令行安裝(需要注意的是pycharm的同步:File->Settings->Project->Project Interpreter->Add[選擇Python版本]->New environment[Location選擇一個空檔案;Base interpreter選擇對應python版本的python.exe;勾選Inherit global site-packages!!!!!!]->OK->項目右鍵Synchronize xxx重新整理library root)

    2)  直接使用pycharm簡單粗暴:File->Default Settings->Project Interpreter->選擇python版本->點選右側“+”号添加庫->搜尋資料庫名稱->選中該庫後點選底部的Install Package(在安裝成功後會出現成功提示);點選“-”号可以解除安裝掉不需要的庫。

    自定義第三方庫的下載下傳路徑:

    1)  找到對應python版本的Lib路徑(D:\Program Files (x86)\Python\Python36-32\Lib)

    2)  找到site.py并修改其中的USER_SITE和USER_BASE:

    USER_SITE = "D:\Program Files (x86)\Python\Python36-32\Lib\site-packages"

    USER_BASE = "D:\Program Files (x86)\Python\Python36-32\Scripts"

    (site-package和Scripts都是已經存在的檔案,其中site-package就是自己安裝第三方庫的目錄)

  6. 打包程式,pyinstller -F  [主檔案] -p [其他檔案1] -p [其他檔案2] --hidden-import[自模組化塊1] --hidden-import[自模組化塊2]

    例:pyinstaller -F DrawDigitsV2.py -p DrawDigitsV1.py --hidden-import DrawDigitsV1

    注意:我是win8系統,以我的情況,要打包的所有py檔案必須與pyinstaller.exe在同一路徑下(絕對路徑不可取),否則會出現找不到module的情況。其他圖檔,文本等依賴檔案與最終exe放于同一路徑下就行

  7. 運作:打開dist檔案夾,輕按兩下exe即可

    備注:可通過直接修改生成.spec檔案相關參數,直接執行pyinstaller -F DrawDigitsV2.py指令生成新的可執行檔案

遞歸:

之前學習c和java的時候也學過遞歸,但是一直覺得不得要領,今天終于領悟到,遞歸是要抽象思考的,而我之前總是想着具象思考,恨不得把遞歸的過程每一步想清楚,心理才舒坦。。。(把現實情況抽象為數學公式或一個簡化過程,極端情況的思考)

例子1:階乘的實作

python學習——day03

例子2:斐波拉契數列

python學習——day03

例子4:字元倒轉

#StrReverse.py
def rvs(s):
    if s=="":
        return s
    else:
        return rvs(s[1:])+s[0]

str=input("請輸入字元串:")
print(rvs(str))
           

運作:請輸入字元串:Hello World

           dlroW olleH

例子5:漢諾塔

#HanNuoTa.py

count=0;
def hanoi(n,src,dst,mid):       #參數1:圓盤數量;參數2:源柱子;參數3:目标柱子;參數4:中間柱子
    global count
    if n==1:
        print("{}:{}->{}".format(1,src,dst))    #将原始柱的盤子移動到目标柱子
        count+=1
    else:
        hanoi(n-1,src,mid,dst)      #将原始柱的n-1個盤子借助目标柱子移動到中間柱子
        print("{}:{}->{}".format(n,src,dst))
        count+=1
        hanoi(n-1,mid,dst,src)      #再将n-1個盤子借助原始柱子從中間柱子移動到目标柱子

S1,S2,S3="A","B","C"
hanoi(3,S1,S2,S3)
           

運作:1:A->B

           2:A->C

           1:B->C

           3:A->B

           1:C->A

           2:C->B

           1:A->B

例子6:科赫雪花

描述:原來的一條直線變成了4條短的直線,每一條短的直線又可執行相同的操作

python學習——day03
#KochDrawV1.py
#科赫曲線小包裹

import turtle
def koch(size,n):  #size->源曲線長度,n->階數
     if n==0:
         turtle.fd(size)    #直接繪制一條直線
     else:
         for angle in [0,60,-120,60]:   #left為“海龜”方向(相對)
             turtle.left(angle)
             koch(size/3,n-1)

def main():
    turtle.setup(600,600)
    turtle.penup()
    turtle.goto(-200,100)
    turtle.pendown()
    turtle.pensize(2)
    # 科赫曲線的繪制
    # koch(400,3)     #3階科赫曲線

    #科赫雪花的繪制
    level=3     #三階科赫雪花
    turtle.color("red")
    koch(400,level)
    turtle.right(120)
    turtle.color("green")
    koch(400,level)
    turtle.right(120)
    turtle.color("blue")
    koch(400,level)
    turtle.hideturtle()
    turtle.done()

main()
           

最終運作:

python學習——day03