python第五天 程序設計方法學

程序設計方法學

體育競技分析

需求:如何科學分析體育競技比賽
輸入球員的水平,能否輸出比賽成績???
在這裏插入圖片描述

簡單來說就是不斷地進行比賽,最後選手的能力的而顯示的輸贏情況,會越來越精確

比賽規則
在這裏插入圖片描述
簡單來說,兩個人打乒乓球。

自定向下的方法:將總問題分解爲很多個小問題,再劃分爲小問題,直到我們可以解決這個小問題,

自底向上的執行,分別執行每一個實際單元,進行測試,測試通過,組合測試。也就是小問題測試沒問題,就合併另一個小問題稱謂一個略大的問題,再進行測試,通過,再合併再測試。

程序總體框架及步驟:

  1. 打印程序的介紹性信息 -》printInfo()
  2. 獲得程序運行的參數 -》getInput()
  3. 利用球員A和球員B的能力值,模擬N局比賽 -》 simNGames()
  4. 輸出球員A和球員B獲勝比賽的場次及概率 -》 printSummary()

定義四個函數來完成以上的功能。

printIntro():打印一些介紹函數

from random import random


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獲勝{}場比賽,佔比{:0.1%}".format(winsA,winsA/n))
    print("選手B獲勝{}場比賽,佔比{:0.1%}".format(winsB,winsB/n))

#模擬N局 分解爲模擬一局比賽
#獲得A 和B 的能力值,最後不斷的進行一場比賽,對輸贏進行累加,
def simNgame(n,proA ,proB):
    winsA,winsB=0,0
    for i in range(n):
        scoreA,scoreB = simOneGame(proA,proB)
        if(scoreA > scoreB):
            winsA+=1
        else:
            winsB+=1
    return winsA,winsB


#一句比賽,如何對局?什麼時候結束
#當比賽ganmeOver()返回爲True時結束也就是得了15分
def simOneGame(proA,proB):
    #初始值
    scoreA,scoreB = 0 , 0
    #設置A 發球
    serving ="A"

    while not gameOver(scoreA,scoreB):
        #如果A 發球
        if serving == "A":
            #設置一個隨機數,如果這個隨機數小於A,也就是說A能夠應付的過來
            if random() < proA:
                scoreA+=1
            #更換髮球方
            else:
                serving = "B"
        #同上
        else:
            # 設置一個隨機數,如果這個隨機數小於B,也就是說b能夠應付的過來
            if random() < proB:
                scoreB += 1
            else:
                serving = "A"
    return scoreA,scoreB
def gameOver(a,b):
    #任意一方的分數等於15就結束
    return a ==15 or b == 15

def mian():
    printIntro()
    proA,proB,n = getInputs()
    winsA,winsB = simNgame(n,proA,proB)
    printSummary(winsA,winsB)

mian()

python程序設計思維

邏輯思維:推理和演繹
實證思維:實驗和驗證
計算思維:設計和構造

抽象和自動化是計算思維的核心,抽象問題的計算過程,利用計算機自動化求解

舉個例子,計算求和
以前的數學家高斯,創造出了求和公式,An = (a1+an)*n/2,典型的邏輯思維
計算思維,不斷地累加幾行代碼就出來了。

量化分析:股票
經驗和預測未來的股票去購買,這是普通人的實證和邏輯思維。
然後計算思維,是將歷史數據全部進行量化,計算未來可能的漲跌概率,去進行購買和拋出

python第三方庫安裝

python的第三方庫的來源

如何搜索相關的庫?
假如要做的是相關的區塊鏈開發, 那麼直接在搜索框裏搜索 blockchain 即可
挑選一個庫,檢索和查看對應的方法,選擇合適的庫進行安裝

庫安裝方法分別有:pip , 集成 ,文件

pip安裝 : 直接在終端上輸入 pip install <第三方庫名> 非常簡單
pip install -U <第三方庫名> 升級對應的第三方庫
pip uninstall <第三方庫名> 卸載第三方庫
pip download <第三方庫名> 下載但不安裝第三方庫
pip show <第三方庫名> 列出某個指定第三方庫的詳細信息
pip serach <第三方庫名> 根據關鍵詞在名稱中介紹和搜索第三方庫(假如要搜索blockchain的庫,那麼直接pip serach blockchain 他會顯示那些標題以及介紹中含有blockchain的第三方庫)
pip list 顯示當前機器安裝的第三方庫

集成安裝:結合特定的python開發工具批量的安裝一批庫
舉個例子:數據計算領域的 Anaconda,當我們安裝好Anaconda相關的開發程序安裝好,與它相關的800個庫,就不需要安裝了。

文件安裝: 有些第三方庫用pip 可以直接下載,但是無法安裝沒因爲有的第三方庫,並不是一個可執行文件,而是源代碼,所以我們需要對他進行編譯。如果機器上沒有編譯環境,那麼只能下載,不能安裝。
當然,有一個網站就提供了那些編譯後的第三方庫 :UCI界面
這個網址是一個UCI 界面,是加州大學的一個教授所維護的一個網站。如果自己的機器不具備編譯環境,那麼就可以直接去這個網站去搜索,然後進行下載對應的版本,然後使用 pip install 文件名 安裝。

os庫調用

os庫是與操作系統相關的基本庫,os庫提供同樣的基本的操作系統交互功能
os庫是python標準庫,包含幾百個函數
常用的路徑操作,進程和管理,環境參數等幾類

路徑操作:os.path 字庫,處理文件路徑及信息
進程管理:啓動系統中其他進程
環境參數:獲得系統硬件信息等環境參數

路徑操作

os.path字庫以path爲入口,用於操作和處理文件路徑

導入庫

import os.path
#或者import os.path as op

函數:
os.path.abspath(path):返回 path 在系統中的絕對路徑。 os.path.abspath(“file.txt”) -》 “C\…\file.txt”

os.path.normpath(path) : 歸一化path的表示形式,統一用 \ 分隔路徑,os.path.normpath(“D://PYE//file.txt”) -> “D:\PYE\file.txt”

os.path.relpath(path) : 返回當前python程序與文件之間的相對路徑。 os.path.relpath(“C://PYE//file.txt”) -> “…\…\…\PYE\file.txt”

os.path.dirname(path) : 返回path中目錄名稱。 os.path.dirname(“D//PYE//file.txt”) -》返回目錄"D//PYE"

os.path.basename(path) :返回path中最後的文件名稱。 os.path.basename(path) -》 返回最後的文件名 “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”) 找這個路徑,並不會打開文件,找到了就返回True,找不到返回False

os.path.isfile(path):判斷path所對應的文件是否存在,返回True / False

os.path.isdir(path):判斷path對應的目錄是否存在,返回True / False

os.path.getatime(path): 返回path對應文件或目錄上一次訪問時間 , os.path.getatime(“D//PYE//file.txt”) - > 15152131232.1231233 返回的是以秒爲單位的數

os.pathmtime(path): 返回path對應文件或目錄最近一次訪問時間,同上依舊返回以秒爲單位的數字類型

os.path.getctime(path): 返回pathh對應文件或目錄的創建時間,time.ctime(os.path.getctime(“D/PYE/file.txt”)) -》 因爲使用了time.ctime 進行格式化,所以返回的是 “SUM Feb 11 21:43:53 2020”

os.path.getsize(path): 返回path對應文件的大小,以字節爲單位. os.path.getsize(“D//PYE/file.txt”) -》 123213 單位爲字節

進程管理

os.system(command) : 執行程序或命令command ,相當於在終端輸入command命令,如果程序正確運行,那麼就返回 0,

調用計算器程序

import os
os.system("C:\\Windows\\System32\\calc.exe")

執行後會直接打開此進程

讓電腦打開畫圖程序,並且打開圖片

import os
os.system("C:\\Windows\\System32\\mspaint.ext \ C:\\Users\\ZHB\\Desktop\\JAVA1.png")

環境參數

os.chdir(path) : 修改當前程序操作文件的路徑: os.chdir(“D:”) 相當於切換目錄

os.getcwd() : 獲得當前路徑。(與linux的pwd一樣)

os.getlogin() :獲得當前系統登陸用戶名名稱

os.cpu_count () : 獲得當前系統的CPU數量。 返回的是一個整形數字

os.urandom(n): 獲得n個字節長的隨機字符串,通常用於加密運算, os。urandom(10) -> b’'ajsiodjasoidhasodha" (一共十個字節長的字符串)

第三方庫自動安裝腳本

需求:批量安裝第三方庫,需要人工干預,能否自動安裝呢??

安裝一個第三方庫 pip 指令即可,我們需要在控制檯輸入 pip install 第三方庫名
那麼我們之前學過的os.system(command) 這個函數我們可以輸入對應的字符串安裝一個第三方庫
那麼安裝多個,實際上就很簡單了。

先確定一下要安裝那些庫

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

這20個庫,就是我們要安裝的了,其實安裝這些非常簡單

import os
libs = {"numpy", "matplotlib" ,"p1l1ow" ,"sklearn","requests",\
"jieba" , "beautifulsoup4" , "wheel","networkx" ,"sympy",\
"pyinstaller" ,"django" ,"flask" ,"werobot" ,"pyqt5",\
"pandas" ," pyopeng1", "pypdf2" ,"docopt" , "pygame" }

#安裝時可能會失敗,所以會有一場拋出
try :
    for lib in libs:
        os.system("pip install {}".format(lib))
    print(lib,"Successful")
except:
    print("Failed Somehow")

練習:

在這裏插入圖片描述

strs = input()
for char in strs:
    ##A Unicode編碼爲65 z的Unicode編碼爲122
        if  ord("a") <= ord(char)<= ord("z") or ord("A")<= \
        ord(char)<=ord("Z"):
            print(char,end="")

在這裏插入圖片描述

numbers = input()
try:
    #不論什麼數字都當作複數來處理,如果將字符串轉爲負數和將字符串轉爲數字再轉爲複數一致,那麼就說明輸入正確
    if complex(numbers) == complex(eval(numbers)):
        print(eval(numbers)**2)
except:
    print("輸入有誤")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章