python應用(4):變量與流程

程序是什麼?就是一堆代碼囉。可是代碼是有組織而來的,不是憑空堆砌出來的。有一個「古老」的說法:程序=數據結構+算法,意思是,程序是由一些數據結構(數據的組織結構)加上某些算法而造成的。從這個角度,算法纔是主驅動力,而數據結構是服務於算法的(固然你可能由於有了某個很好用的數據結構而設計了某個算法,但算法仍然是主角)。那算法又是什麼?算法就是設計好的,達成某個事情的步驟。因此,從這個角度,程序只是某些步驟的表現,這些步驟也叫流程,而程序就是流程表現。python

我同意這個「古老」說法(或者是我對它的解讀),程序只是封裝流程的外殼,於是,程序跟算法是兩碼事,雖然它們是有關聯的。程序只是算法的一種表現,但不是惟一的表現,算法還能夠用筆寫到紙上,還能夠用算盤表現出來,還能夠經過一些對答、比喻或類比表達出來,還能夠經過實際操做表現出來。算法能夠是通用的設計步驟,也能夠是某個領域的特有的設計步驟。算法有專門的設計與分析,它並不須要程序來支撐。算法是魂,程序是殼,存在這些狀況:「算法很強,但程序很爛」(殼寫很差)、「程序很強,但算法很爛」(魂設計很差,但很會封裝)。算法

若是程序只是一個殼,那是否是就不重要了呢?確定不是了,寫殼,也是技術活,也要設計,也講經驗,也要學習。並且,程序能手是能夠經過程序去設計算法的,好比他們能夠熟悉地經過if/while這些結構去設計算法,固然,這不是必須的,也未必是好的設計算法的辦法。特別是,對於程序開發,好比先後端、客戶端等開發,你不熟悉掌握寫程序(寫殼)的技能與知識,你是站不住腳的,但未必要求你要有很強的算法設計能力。後端

好了,說了一堆廢話。其實我是想說python的語言特性,掌握這些特性才能更快更好地把殼寫好。跟練習打籃球同樣,一開始先把分解動做作好,以後再連貫起來--那若是不練分解而直接連貫,行不行?也行,練分解不是必須的,特別是對工具的使用,邊用邊搜索也是個好辦法,但本文的介紹,是從分解開始。數據結構

python的語言特性能夠分:變量、數據類型(數據結構)、語句、代碼組織等。dom

(1)變量

變量,就是值能夠改變的量,因此變量是用來存放值的。在python中定義一個變量,就是把一個值給這個變量,因此你想忘記初始化都不行,你必定要把值給變量的,而在給值時,這個變量的類型就肯定下來了,是的,變量都有類型。python內置了很多好用的類型(也能夠叫數據結構),這個後續再詳細介紹。工具

須要什麼變量?這個跟流程有關,好比,假設流程是把輸入的兩個數相加,那就能夠考慮使用兩個變量,用於保存輸入的值,好比這樣:
設計變量學習

最簡單的想法,就是流程中須要保存(臨時或長期保存)什麼值,就設計什麼變量。spa

(2)流程

流程是主角。翻譯

若是說一個程序的邏輯不行,通常是說程序在流程處理上不行,而常常說的「程序算法」,說的就是流程的設計。程序是對流程的封裝,前提是,這個流程要想好,要設計好,固然,流程(或算法)也不必定要你來設計,別人設計你來翻譯也是能夠的。設計

程序就是對流程的翻譯。因此,之前有一段時間,部門主管教我寫代碼,是要我先用註釋把流程的每一步寫好,而後再寫代碼翻譯。固然因爲註釋多是沒必要要的負擔,才慢慢地不寫步驟上的註釋,但意思就是要造成習慣:先設計好流程,再來寫代碼。

無論流程的具體內容是什麼,從結構來看,流程能夠區分紅三種:順序流程、分支流程、循環流程。

順序流程,就是從上到下一句一句地執行的流程,這樣的流程必然會存在。分支流程(if/else),就是根據不一樣的條件,選擇執行的操做。循環流程,就是重複地執行某些操做。

這三種流程,基本上都是混合使用,以組合拳的方式出現,好比下面的「猜數字」:

# -*- coding: utf-8 -*-
import random

secret=random.randint(0,100)
temp=input("請說出我想的數字:");
guess=int(temp)
while guess!=secret:
    if guess>secret:
        print("沒有這麼大,說個小的!")
    else:
		print("過小了,說個大的!")
    temp=input("猜錯了,再來一次吧:")
    guess=int(temp)
print("厲害,猜對了!")

上面這個「猜數字」遊戲,用到了循環(while)與分支(if..else)的流程。

具體上,對於分支流程,通常有兩種表達形式:

if ... else
if ... elif ... else

對於循環流程,通常有兩種表達形式:

while xx:
for xx in []:

再寫兩個程序,一個打印「鑽石」,一個打印九九乘法表:

i=1
while i<=17:
    cnt = i
    if i>9:
        cnt = 18-i
    starcnt = (cnt-1)//2
    spacecnt = 4-starcnt
    print(" "*spacecnt, end="")
    print("*"*starcnt,end="")
    print("*", end="")
    print("*" * starcnt, end="")
    print(" " * spacecnt)
    i+=2
j=1
while j<=9:
    i=1
    while i<=j:
        print("%d * %d = %d"%(i,j,i*j), end="\t")
        i+=1
    print("")
    j+=1

發現規律並設計,是獲得流程的重要辦法。

打印效果以下:
鑽石
乘法表

好了,以上介紹了變量跟流程,特別是對流程的翻譯即語句的使用。一門語言是一種工具,你要學着去用,邊用邊試錯,才能更好更快地掌握它,不要拘泥於細節,除非細節影響到你解決問題了。

有緣再見,see you。

相關文章
相關標籤/搜索