【Python程序設計(八)】程序設計方法學

1 實例: 體育競技分析

問題分析:體育競技分析python

  • 需求:毫釐是多少?如何科學分析體育競技比賽?
  • 輸入:球員的水平
  • 輸出:可預測的比賽成績

比賽規則:交換髮球,開始時一方先發球,發球方獲勝,發球放得 1 分,接球放不得分。發球方輸,雙方均不得分。如 A 發球,A 勝得 1 分,B 不得分;A 輸兩人都不得分。而後換 B 發球。先得 15 分勝出。django

自頂向下和自底向上flask

  • 自頂向下:解決複雜問題的有效方法。將一個總問題表達爲若干個小問題組成的形式,使用一樣方法進一步分解小問題,直至小問題能夠用計算機簡單明瞭的解決。
  • 自底向上(執行):逐步組建複雜系統的有效測試方法。分單元測試,逐步組裝,按照自頂向下相反的路徑操做,直至系統各部分以組裝的思路都通過測試和驗證。

程序整體框架及步驟微信

  • 步驟1:打印程序的介紹性信息              - printInfo()
  • 步驟2:得到程序運行參數:proA, proB, n         - getInputs()
  • 步驟3:利用球員 A 和 B 的能力值,模擬 n 局比賽     - simNGames()
  • 步驟4:輸出球員 A 和 B 獲勝比賽的場次及機率      - printSummary()

程序分爲四個部分,打印介紹信息,得到運行參數,模擬 n 局比賽,輸出結果。模擬 n 場比賽能夠分解爲模擬一場比賽 n 次,同時模擬一場比賽的每局比賽須要判斷當前比賽是否已經決出勝負。網絡

在這裏插入圖片描述

from random import *
def printIntro():
    print("這個程序模擬兩個選手A和B的某種競技比賽")
    print("程序運行須要A和B的能力值(以0到1之間的小數表示)")

def getInputs():
    a = eval(input("請輸入選手A的能力值(0-1): "))
    b = eval(input("請輸入選手B的能力值(0-1): "))
    n = eval(input("模擬比賽的場次: "))
    return a, b, n

def printSummary(winsA, winsB):
    n = winsA + winsB
    print("競技分析開始,共模擬{}場比賽".format(n))
    print("選手A獲勝{}場比賽,佔比{:.1%}".format(winsA, winsA/n))
    print("選手B獲勝{}場比賽,佔比{:.1%}".format(winsB, winsB/n))

def gameover(scoreA, scoreB):
    return scoreA == 15 or scoreB == 15

def simOneGame(proA, proB):
    scoreA, scoreB = 0, 0
    serving = "A"
    while not gameover(scoreA, scoreB):
        if serving == "A":
            if random() < proA:
                scoreA += 1
            else:
                serving = "B"
        else:
            if random() < proB:
                scoreB += 1
            else:
                serving = "A"
    return scoreA, scoreB

def simNGames(n, probA, probB):
    winsA, winsB = 0, 0
    for i in range(n):
        scoreA, scoreB = simOneGame(probA, probB)
        if scoreA > scoreB:
            winsA += 1
        else:
            winsB += 1
    return winsA, winsB
    
def main():
    printIntro()
    probA, probB, n = getInputs()
    winsA, winsB = simNGames(n, probA, probB)
    printSummary(winsA, winsB)

main()

2 Python 第三方庫安裝

優質得三方庫平臺:框架

python123 平臺能夠學習,也整理了不少三方庫,整理了國內得鏡像 https://python123.io/
Python 社區 PyPI(Python Package Index),13 萬個第三方庫 https://pypi.org/dom

2.1 第三方庫的pip安裝方法

經常使用的 pip 命令機器學習

命令 說明
pip install <第三方庫名> 安裝指定的第三方庫
pip install –U <第三方庫名> 使用 -U 標籤更新已安裝的指定第三方庫
pip uninstall <第三方庫名> 卸載指定的第三方庫
pip download <第三方庫名> 下載但不安裝指定的第三方庫
pip show <第三方庫名> 列出某個指定第三方庫的詳細信息
pip search <關鍵詞> 根據關鍵詞在名稱和介紹中搜索第三方庫
pip list 列出當前系統已經安裝的第三方庫

2.2 第三方庫的集成安裝方法

集成安裝:結合特定 Python 開發工具的批量安裝
Anaconda
https://www.continuum.io
支持近 800 個第三方庫,包含多個主流工具,適合數據計算領域開發ide

2.3 第三方庫的文件安裝方法

安裝文件下載地址
http://www.lfd.uci.edu/~gohlke/pythonlibs/
在這裏插入圖片描述
文件安裝方法函數

  • 步驟1:在UCI頁面上搜索文件
  • 步驟2:下載對應版本的文件
  • 步驟3:使用pip install <文件名>安裝

3 os 庫的使用

os庫提供通用的、基本的操做系統交互功能,os庫是Python標準庫,包含幾百個函數。經常使用路徑操做、進程管理、環境參數等幾類

3.1 os 庫之路徑操做

os.path 子庫以 path 爲入口,用於操做和處理文件路徑
import os.path 或 import os.path as op

函數 描述
os.path.abspath(path) 返回 path 在當前系統中的絕對路徑
>>>os.path.abspath( 「file.txt」 )
‘C:\\Users\\Tian Song\\Python36-32\\file.txt’
os.path.normpath(path) 歸一化 path 的表示形式,統一用 \\ 分隔路徑
>>>os.path.normpath( 「D://PYE//file.txt」 )
‘D:\\PYE\\file.txt’
os.path.relpath(path) 返回當前程序與文件之間的相對路徑 (relative path)
>>>os.path.relpath( 「C://PYE//file.txt」 )
’…\\…\\…\\…\\…\\…\\…\\PYE\\file.txt’
os.path.dirname(path) 返回 path 中的目錄名稱
>>>os.path.dirname( 「C://PYE//file.txt」 )
‘D://PYE’
os.path.basename(path) 返回 path 中最後的文件名稱
>>>os.path.basename( 「C://PYE//file.txt」 )
‘file.txt’
os.path.join(path, *paths) 組合 path 與 paths,返回一個路徑字符串
>>>os.path.join( 「D:/」, 「PYE/file.txt」 )
‘D:/PYE/file.txt’
os.path.exists(path) 判斷 path 對應文件或目錄是否存在,返回 True 或 False
>>>os.path.exists( 「D://PYE//file.txt」 )
False
os.path.isfile(path) 判斷 path 所對應是否爲已存在的文件,返回 True 或 False
>>>os.path.isfile( 「D://PYE//file.txt」 )
True
os.path.isdir(path) 判斷 path 所對應是否爲已存在的目錄,返回 True 或 False
>>>os.path.isdir( 「D://PYE//file.txt」 )
False
os.path.getatime(path) 返回 path 對應文件或目錄上一次的訪問時間
>>>os.path.getatime( 「D:/PYE/file.txt」 )
1518356633.7551725
os.path.getmtime(path) 返回 path 對應文件或目錄最近一次的修改時間
>>>os.path.getmtime( 「D:/PYE/file.txt」 )
1518356633.7551725
os.path.getctime(path) 返回 path 對應文件或目錄的建立時間
>>>time.ctime(os.path.getctime( 「D:/PYE/file.txt」 ))
‘Sun Feb 11 21:43:53 2018’
os.path.getsize(path) 返回 path 對應文件的大小,以字節爲單位
>>>os.path.getsize( 「D:/PYE/file.txt」 )
180768

3.2 os 庫之進程管理

os.system(command)

  • 執行程序或命令 command
  • 在 Windows 系統中,返回值爲 cmd 的調用返回信息
import os
os.system("C:\\Windows\\System32\\calc.exe")
>>>0

3.3 os 庫之環境參數

獲取或改變系統環境信息

函數 描述
os.chdir(path) 修改當前程序操做的路徑
>>>os.chdir(「D:」)
os.getcwd() 返回程序的當前路徑
>>>os.getcwd()
‘D:\’

獲取操做系統環境信息

函數 描述
os.getlogin() 得到當前系統登陸用戶名稱
>>>os.getlogin()
‘Tian Song’
os.cpu_count() 得到當前系統的 CPU 數量
>>>os.cpu_count()
8

獲取操做系統環境信息

函數 描述
os.urandom(n) 得到 n 個字節長度的隨機字符串,一般用於加解密運算
>>>os.urandom(10)
b’=l>7}\xca\x7f\x14\xe3\x0b’

4 經常使用第三方庫

庫名 用途
NumPy N 維數據表示和運算
Matplotlib 二維數據可視化
PIL 圖像處理
Scikit-Learn 機器學習和數據挖掘
Requests HTTP 協議訪問及網絡爬蟲
Jieba 中文分詞
Beautiful Soup HTML 和 XML 解析器
Wheel Python 第三方庫文件打包工具
PyInstaller 打包 Python 源文件爲可執行文件
Django Python最流行的 Web 開發框架
Flask 輕量級 Web 開發框架
WeRoBot 微信機器人開發框架
SymPy 數學符號計算工具
Pandas 高效數據分析和計算
Networkx 複雜網絡和圖結構的建模和分析

5 實例: 第三方庫安裝腳本

需求:批量安裝第三方庫,實現自動安裝?

import os
libs = {"numpy","matplotlib","pillow","sklearn","requests",\
        "jieba","beautifulsoup4","wheel","networkx","sympy",\
        "pyinstaller","django","flask","werobot","pyqt5",\
        "pandas","pyopengl","pypdf2","docopt","pygame"}
try:
    for lib in libs:
        os.system("pip install " + lib)
    print("Successful")
except:
    print("Failed Somehow")
相關文章
相關標籤/搜索