真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python程序設(shè)計的方法

本篇文章和大家了解一下python程序設(shè)計的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),鹽田企業(yè)網(wǎng)站建設(shè),鹽田品牌網(wǎng)站建設(shè),網(wǎng)站定制,鹽田網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,鹽田網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

python程序設(shè)計的方法

Python是一種面向?qū)ο?strong>oop(Object Oriented Programming)的腳本語言。

面向?qū)ο笫遣捎没趯ο螅▽嶓w)的概念建立模型,模擬客觀世界分析、設(shè)計、實現(xiàn)軟件的辦法。

在面向?qū)ο蟪绦蛟O(shè)計中,對象包含兩個含義,其中一個是數(shù)據(jù),另外一個是動作。面向?qū)ο蟮姆椒ò褦?shù)據(jù)和方法組合成一個整體,然后對其進行系統(tǒng)建模。

python編程思想的核心就是理解功能邏輯,如果對解決一個問題的邏輯沒有搞清楚,那么你的代碼看起來就會非常的紊亂,讀起來非常的拗口,所以一旦邏輯清晰,按照模塊對功能進行系統(tǒng)編程,那么你的代碼設(shè)計肯定是漂亮的?。?!

1 基本的程序設(shè)計模式

任何的程序設(shè)計都包含IPO,它們分別代表如下:

  • I:Input 輸入,程序的輸入

  • P:Process 處理,程序的主要邏輯過程

  • O:Output 輸出,程序的輸出

因此如果想要通過計算機實現(xiàn)某個功能,那么基本的程序設(shè)計模式包含三個部分,如下:

  • 確定IPO:明確需要實現(xiàn)功能的輸入和輸出,以及主要的實現(xiàn)邏輯過程;

  • 編寫程序:將計算求解的邏輯過程通過編程語言進行設(shè)計展示;

  • 調(diào)試程序:對編寫的程序按照邏輯過程進行調(diào)試,確保程序按照正確邏輯正確運行。

2 解決復(fù)雜問題的有效方法:自頂向下(設(shè)計)

2.1 自頂向下-分而治之

如果要實現(xiàn)功能的邏輯比較復(fù)雜的時候,就需要對其進行模塊化設(shè)計,將復(fù)雜問題進行分解,轉(zhuǎn)化為多個簡單問題,其中簡單問題又可以繼續(xù)分解為更加簡單的問題,直到功能邏輯可以通過模塊程序設(shè)計實現(xiàn),這也是程序設(shè)計的自頂向下特點??偨Y(jié)如下:

  • 將一個總問題表達為若干個小問題組成的形式

  • 使用同樣方法進一步分解小問題

  • 直至,小問題可以用計算機簡單明了的解決

2.2 舉例1:體育競技分析

2.2.1 程序總體框架

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

2.2.2 程序設(shè)計

# 導(dǎo)入python資源包
from random import random
 
# 用戶體驗?zāi)K 
def printIntro():
    print("這個程序模擬兩個選手A和B的某種競技比賽")
    print("程序運行需要A和B的能力值(以0到1之間的小數(shù)表示)")
 
# 獲得A和B的能力值與場次模塊 
def getIntputs():
    a = eval(input("請輸入A的能力值(0-1):"))
    b = eval(input("請輸入B的能力值(0-1):"))
    n = eval(input("模擬比賽的場次:"))
    return a, b, n
 
# 模擬n局比賽模塊 
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
 
# 判斷比賽結(jié)束條件 
def gameOver(a, b):
    return a == 15 or b == 15
 
# 模擬n次單局比賽=模擬n局比賽 
def simOneGame(probA, probB):
    scoreA, scoreB = 0, 0
    serving = "A"
    while not gameOver(scoreA, scoreB):
        if serving == "A":
            if random() < probA:
                scoreA += 1
            else:
                serving = "B"
        else:
            if random() < probB:
                scoreB += 1
            else:
                serving = "A"
    return scoreA, scoreB
 
# 打印結(jié)果模塊 
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))
 
 
def main():
    printIntro()    
    probA, probB, n = getIntputs()                # 獲得用戶A、B能力值與比賽場次N
    winsA, winsB = simNGames(n, probA, probB)     # 獲得A與B的場次
    printSummary(winsA, winsB)                    # 返回A與B的結(jié)果
 
 
main()

2.2.3 測試結(jié)果

python程序設(shè)計的方法

2.3 舉例2:的斐波那契數(shù)列

自頂向下的方式其實就是使用遞歸來求解子問題,最終解只需要調(diào)用遞歸式,子問題逐步往下層遞歸的求解。

程序設(shè)計:

cache = {}

def fib(number):
    if number in cache:
        return cache[number]
    if number == 0 or number == 1:
        return 1
    else:
        cache[number] = fib(number - 1) + fib(number - 2)
    return cache[number]

if __name__ == '__main__':
    print(fib(35))

運行結(jié)果:

14930352
>>>

理解自頂向下的設(shè)計思維:分而治之

3 逐步組建復(fù)雜系統(tǒng)的有效測試方法:自底向上(執(zhí)行)

3.1 自底向上-模塊化集成

自底向上(執(zhí)行)就是一種逐步組建復(fù)雜系統(tǒng)的有效測試方法。首先將需要解決的問題分為各個三元進行測試,接著按照自頂向下相反的路徑進行操作,然后對各個單元進行逐步組裝,直至系統(tǒng)各部分以組裝的思路都經(jīng)過測試和驗證。

理解自底向上的執(zhí)行思維:模塊化集成

自底向上分析思想:

  • 任何時候棧中符號串和剩余符號串組成一個句型,當(dāng)句柄出現(xiàn)在棧頂符號串中時,就用該句柄進行歸約,這樣一直歸約到輸入串只剩結(jié)束符、棧中符號只剩下開始符號,此時認為輸入符號串是文法的句子,否則報錯。

自底向上是?種求解動態(tài)規(guī)劃問題的方法,它不使用遞歸式,而是直接使用循環(huán)來計算所有可能的結(jié)果,往上層逐漸累加子問題的解。在求解子問題的最優(yōu)解的同時,也相當(dāng)于是在求解整個問題的最優(yōu)解。其中最難的部分是找到求解最終問題的遞歸關(guān)系式,或者說狀態(tài)轉(zhuǎn)移方程。

3.2 舉例:0-1背包問題

3.2.1 問題描述

你現(xiàn)在想買?大堆算法書,有一個容量為 V的背包,這個商店?共有 n個商品。問題在于,你最多只能拿 Wkg 的東西,其中 wi vi分別表示第 i個商品的重量和價值。最終的目標(biāo)就是在能拿的下的情況下,獲得最大價值,求解哪些物品可以放進背包。

對于每?個商品你有兩個選擇:拿或者不拿。

3.2.2 自底向上分析

?先要做的就是要找到“子問題”是什么。通過分析發(fā)現(xiàn):每次背包新裝進?個物品就可以把剩余的承重能力作為?個新的背包來求解,?直遞推到承重為0的背包問題。

m[i,w]表示偷到商品的總價值,其中 i表示?共多少個商品,w表示總重量,所以求解 m[i,w]就是子問題,那么看到某?個商品i的時候,如何決定是不是要裝進背包,需要考慮以下:

  • 該物品的重量大于背包的總重量,不考慮,換下?個商品;

  • 該商品的重量小于背包的總重量,那么嘗試把它裝進去,如果裝不下就把其他東西換出來,看看裝進去后的總價值是不是更高了,否則還是按照之前的裝法;

  • 極端情況,所有的物品都裝不下或者背包的承重能力為0,那么總價值都是0;

由以上的分析,可以得出m[i,w]的狀態(tài)轉(zhuǎn)移方程為:

m[i,w] = max{m[i-1,w], m[i-1,w-wi]+vi}

3.2.3 程序設(shè)計

# 循環(huán)的?式,自底向上求解
cache = {}
items = range(1,9)
weights = [10,1,5,9,10,7,3,12,5]
values = [10,20,30,15,40,6,9,12,18]
# 最?承重能?
W = 4

def knapsack():
    for w in range(W+1):
        cache[get_key(0,w)] = 0
    for i in items:
        cache[get_key(i,0)] = 0
        for w in range(W+1):
            if w >= weights[i]:
                if cache[get_key(i-1,w-weights[i])] + values[i] > cache[get_key(i-1,w)]:
                    cache[get_key(i,w)] = values[i] + cache[get_key(i-1,w-weights[i])]
                else:
                    cache[get_key(i,w)] = cache[get_key(i-1,w)]
            else:
                cache[get_key(i,w)] = cache[get_key(i-1,w)]
    return cache[get_key(8,W)]

def get_key(i,w):
    return str(i)+','+str(w)

if __name__ == '__main__':
    # 背包把所有東西都能裝進去做假設(shè)開始
    print(knapsack())
29
>>>

以上就是python程序設(shè)計的方法的簡略介紹,當(dāng)然詳細使用上面的不同還得要大家自己使用過才領(lǐng)會。如果想了解更多,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道哦!


新聞標(biāo)題:python程序設(shè)計的方法
轉(zhuǎn)載注明:http://weahome.cn/article/iipecd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部