Python零基礎入門—算法的實現與偽代碼

2020-12-03 米粒教育

同學們好。在前面一節課,我們了解了什麼是算法,知道了在一個算法中,要有輸入、計算過程、還要有輸出。這節課我們來討論算法的實現。

這節課的內容與前面課程的課後練習有關。在課後練習中要求同學們寫出計算長方形面積算法的步驟,步驟要包含輸入、計算過程和輸出。老師在這裡寫出計算長方形面積算法的步驟,同學們可以和自己寫的算法步驟比較一下,看看哪個寫的更詳細和完善一些?

計算長方形面積算法的步驟如下:

第一步,要求用戶輸入長方形的長度和寬度;

第二步,判斷長方形的長度和寬度是否大於0,如果大於0,繼續下一個步驟,否則提示用戶輸入的長度和寬度錯誤,算法結束;

第三步,計算長度和寬度的乘積;

第四步,輸出長度和寬度的乘積。

在這個算法中:第一步是輸入,算法要獲取長方形的長度和寬度;第二步、第三步是計算過程,主要是判斷長度和寬度的數值是否符合要求,以及計算它們的乘積;第四步是輸出計算結果。

現在我們需要把算法步驟寫成代碼,然後交給計算機,計算機就可以來幫助我們計算長方形面積了。其實計算機最擅長做這種已經形式化的公式的東西,只有把公式中的數值代入進去就可以計算出結果來,而這恰恰不是我們人腦最擅長的。因此我們可以將數學中的各種計算公式都可以寫成程序,讓計算機幫我們來計算各種數學公式,我們要做的就是輸入公式中的數值。

下面我們給出計算長方形面積的算法步驟,不過這次的算法步驟是站在計算機角度來寫的:

第一步,算法的輸入就是長方形面積的長和寬。因次要設置num1和num2兩個變量,接收用戶輸入的長度和寬度,並存儲到num1和num2兩個變量。

這裡的變量類似於我們數學中學過的用字母來表示數,例如a可以表示8,b可以表示12,那麼a*b的結果就是96,這裡用的是字符串,字符串和字母的意義是一樣的。

第二步,判斷num1和num2是否大於0,如果大於0,繼續下一個步驟,否則提示用戶長度和寬度輸入錯誤,算法結束。前面我們說過,算法的步驟是有限的而且還要有計算結果,如果用戶輸入的長方形長度和寬度小於0的話,計算長方形的面積就無意義,因此算法也無意義,所以要判斷用戶輸入的長度和寬度是否小於零。

第三步,計算num1和num2的乘積,並將乘積結果存儲到result變量;result是用來存儲結果的。

第四步,顯示result變量的值到屏幕。就是把result表示的那個數在計算機屏幕上顯示出來。

算法非常簡單,四個步驟,如何讓計算機執行這個算法呢?我們用偽代碼來實現算法。偽代碼不是真正的程序代碼,但它已經接近程序代碼,它是用人類能理解的語言來實現算法的一種語言。

偽代碼估計同學們都看不懂,我來解釋一下。

每段偽代碼都是從Begin開始,End結束。Begin和End都是英文單詞,Begin在偽代碼中表示算法開始的意思,End在偽代碼中表示算法結束的意思。在偽代碼中,我們可以把每行的句子稱為一條語句,這樣算來,這段偽代碼共有9條語句,括號佔一行的不算。

第二行語句是說我這裡聲明了兩個變量,變量名稱分別是num1和num2,前面我們說過可以把變量看成是可以表示數字的字母或字符串,但現在num1和num2表示什麼數還不清楚。

第三行語句是說輸入num1和num2,這條語句就是為num1和num2賦值一個數的,賦值的意思就是把一個數和前面聲明的變量名稱聯繫起來。例如,把5賦值給變量num1,num1表示的數就是5,把20賦值給變量num2,num2表示的數就是20。

第四行語句用到英文單詞IF,IF在英文單詞中是如果的意思。如果是假設的意思,既然是假設就要分兩種情況了:第一種情況是滿足假設的條件,在上面的偽代碼中就是num1小於0,或者num2小於0,這裡的「||」是或者的意思。因此只要有一個條件滿足,或者num1小於0,或者num2小於0、或者num1和num2都小於0,就會執行IF後面大括號內的語句。如果不滿足假設,也就是在num1和num2都大於0的情況下,就不執行IF後面大括號內的語句。

我們來分析偽代碼的第五條語句,這條語句的內容是在Print單詞後面跟著一對小括號,小括號裡面的內容是用雙引號括起來的字符串。前面我們說過,字符串是由多個字符組成的詞或句子。如果同學們不了解Print單詞的意思,我們可以百度一下,Print最直接的意思就是列印。那麼我們就明白這條語句的意思了,Print就是把小括號內的字符串列印到計算機屏幕上。

偽代碼的第六條語句是退出程序,我們知道程序既然是算法的實現,算法結束程序自然就結束了。但是我們要注意,這個退出程序是不正常的退出,因為算法過程沒有結束,只是出了問題,算法沒法往下執行了,所以要退出。

偽代碼的第七條語句是一個算式,同學們一定會說這是一個乘法算式。對,它確實是乘法算式,只是這個乘法算式中的乘數和被乘數不是數而是變量名稱,前面我們已經說過了,可以把變量看成是可以表示數字的字母或字符串,這個字母或字符串就是變量的名稱,每個變量都表示一個數。例如num1表示數5,num2表示數6,那麼num1*num2的結果是30,30再賦值給result變量,這裡的=就是賦值的意思,就是把數30和result變量關聯起來,在這裡result就是30,當然如果我們把50賦值給result,result表示的數就是50。

偽代碼的第八條語句也是Print語句,這個Print語句是列印result表示的數到計算機屏幕,不是列印result這個字符串到計算機屏幕。

偽代碼的第九條語句是End語句,也就是算法結束,算法結束程序也就結束了。

因此要讓計算機執行算法,就必須要把算法用程式語言編寫出來,如Python語言。偽代碼是一種算法描述語言,可以很容易地轉換為程式語言,如Python、java語言等。可見,程序是算法的實現,算法通過某一種程式語言實現後,就是程序。

課程小結

這節課我們主要討論和學習了下面這些內容:

(1)在描述算法的過程中,要用到變量來說明需要輸入的數據,數據可能是一些數、也可能是一些單詞或句子。變量就是用來描述這些數據的,每個變量都有一個名稱,我們通過這個名稱就能確定這個變量對應的是什麼數據。

(2)在描述算法的過程中,我們還用到了賦值這個詞語。賦值就是將一個數或者一個單詞或句子與變量關聯起來。在程式語言中賦值與「=」等價。程式語言裡的「=」號不是相等的意思,而是賦值的意思。

(3)我們還學習了用偽代碼來實現算法,用偽代碼實現的算法雖然不能在計算機上運行,但它已經非常接近於程式語言了。我們只要能看懂偽代碼,就能看懂實際的程序代碼。

課後小練習

如果要編寫一個求兩數和的算法,需要用到幾個變量?算法步驟你會怎麼寫呢?

相關焦點

  • 程式設計師出身的馬化騰,居然熱衷於偽代碼?你會寫嗎?
    不知道各位對偽代碼的編寫有什麼心得,下面就來談談偽代碼應該怎麼寫! 偽代碼(Pseudocode)是一種算法描述語言。使用偽代碼的目的是為了使被描述的算法可以容易地以任何一種程式語言(Pascal,C,Java,etc)實現。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    因篇幅有限,以下展示的只是課程裡部分內容如對python課程有更多疑問 請諮詢客服 1零基礎入門全能班 01 –python簡介 02 第一個程序 03-python執行方式和pycharm設置 04-程序的注釋和算術運算符 05 程序執行原理 06變量的使用以及類型 07
  • 高斯混合模型(GMM):理念、數學、EM算法和python實現
    高斯混合模型是一種流行的無監督學習算法。GMM方法類似於K-Means聚類算法,但是由於其複雜性,它更健壯,更有用。K-means聚類使用歐式距離函數來發現數據中的聚類。只要數據相對於質心呈圓形分布,此方法就可以很好地工作。
  • 如何學習SVM(支持向量機)以及改進實現SVM算法程序 - 雷鋒網
    雷鋒網 AI 科技評論按,本文為韋易笑在知乎問題如何學習SVM(支持向量機)以及改進實現SVM算法程序下面的回覆,雷鋒網 AI 科技評論獲其授權轉載。以下為正文:學習 SVM 的最好方法是實現一個 SVM,可講理論的很多,講實現的太少了。
  • 【強化學習實戰】基於gym和tensorflow的強化學習算法實現
    這一講,我們將利用gym和tensorflow來實現兩個最經典的強化學習算法qleanring 和基於策略梯度的方法。本節課參考了莫煩的部分代碼(見知乎問答《強化學習(reinforcement learning)有什麼好的開源項目、網站、文章推薦一下?》),在此對其表示感謝。
  • 一種長序列小波變換快速算法的DSP實現
    美國TI公司是全球最大的DSP供應商,其生產的TMS320C55x系列16位定點DSP晶片具有低功耗、高性能等特點,具有廣泛的應用領域,本文應用該系列DSP晶片,將文獻[2]提出的小波變換快速算法用C語言開發加以實現,解決了小波變換實時、高精度處理的要求。
  • 一文讀懂遺傳算法工作原理(附Python實現)
    原標題:一文讀懂遺傳算法工作原理(附Python實現) 選自AnalyticsVidhya 參與:晏奇、黃小天下面我不會馬上講解這個問題的解決過程,而是讓我們先來用 TPOT 庫去實現它。 5.2 用 TPOT 庫來實現 這個部分相信是你在一開始讀本文時心裡最終想實現的那個目標。即:實現。
  • 小白學數據:教你用Python實現簡單監督學習算法
    有很多方法可以實現有監督學習,我們將探討幾種最常用的方法。根據給定的數據集,機器學習可以分為兩大類:分類(Classification)和回歸(Regression)。如果給定的數據集的輸出值是類別,那麼待解決是分類問題。
  • 加快Python算法的四個方法(二)Numba
    CDA數據分析師 出品相信大家在做一些算法經常會被龐大的數據量所造成的超多計算量需要的時間而折磨的痛苦不已,接下來我們圍繞四個方法來幫助大家加快一下Python的計算時間,減少大家在算法上的等待時間。今天給大家介紹Numba這一塊的內容。1.簡介所以什麼是Numba呢?
  • 西安Python測試開發全棧核心課程
    — 自由玩轉算法+爬蟲(Python基礎語法)課程二:python Selenium深入實戰電商平臺(基於Web平臺的自動化測試)課程三:接口自動化測試課程四:Locust 任務挑戰模式開啟性能壓測(性能自動化測試)課程五:佛系玩轉APP自動化測試企業級任務(手機自動化測試)課程六:測試軟技能加油站【課程優勢】
  • 用Python實現多層感知器神經網絡
    圖4:權重初始化實現3. 偏差初始化像權重初始化一樣,偏置矩陣的大小取決於圖層大小,尤其是當前圖層大小。偏置初始化的一種方法是將偏置設置為零。對於我們的實現,我們將需要為每個隱藏層和輸出層提供一個偏差。
  • KNN分類算法的python實現
    前言 K最近鄰(k-Nearest Neighbor,KNN)分類算法,是一個理論上比較成熟的方法,也是最簡單的機器學習算法之一。該方法的思路是:在特徵空間中,如果一個樣本附近的k個最近(即特徵空間中最鄰近)樣本的大多數屬於某一個類別,則該樣本也屬於這個類別。。
  • 【算法系列】凸優化的應用——Python求解優化問題(附代碼)
    推薦閱讀   Sklearn包含的常用算法  隨機森林算法入門(python)  下降方法:坐標下降、梯度下降、次梯度下降>  機器學習算法Python實現--邏輯回歸  機器學習算法Python實現--線性回歸分析  【機器學習算法系列】機器學習中梯度下降法和牛頓法的比較  【機器學習算法系列】如何用Apriori尋找到繁雜數據之間的隱藏關係  後臺回復「代碼
  • ProjectQ:解鎖Python實現量子計算的新方式!
    與IBM的QISKit類似,允許用戶在Python中實現量子程序,並以強大而直觀的語法訪問IBM Q Experience。ProjectQ可以將程序轉換為任何類型的後端,無論是在經典計算機上運行的模擬器還是實際的量子晶片。
  • python基礎知識科普:python的起源和發展史以及應用場景
    它是用C語言實現的,並能夠調用C語言的庫文件。從一出生,Python已經具有了 :類,函數,異常處理,包含表和詞典在內的核心數據類型,以及模塊為基礎的拓展系統。Python的這種偽代碼本質是它最大的優點之一。它使你能夠專注於解決問題而不是去搞明白語言本身。易學————就如同你即將看到的一樣,Python極其容易上手。前面已經提到了,Python有極其簡單的語法。
  • 機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用...
    原標題:機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用高級研修班通信和信息技術創新人才培養工程項目辦公室 通人辦〔2018〕 第5號 機器學習、深度學習算法原理與案例實踐暨Python
  • 用Python實現隨機森林算法
    除了仍然根據從訓練數據樣本建立複合模型之外,隨機森林對用做構建樹(tree)的數據特徵做了一定限制,使得生成的決策樹之間沒有關聯,從而提升算法效果。本文章旨在探討如何用 Python 實現隨機森林算法。
  • python實現高斯樸素貝葉斯分類器
    Python部落(python.freelycode.com)組織翻譯,禁止轉載,歡迎轉發。
  • 如何在 i5 上實現 20 倍的 Python 運行速度?
    他對外宣布:在配備四核 i5 的 iMAC 上實現了 20 倍的性能加速!至於他是怎麼做到的,請繼續往下看(含代碼)。安裝: % bash Anaconda2-4.3.0-Linux-x86_64.sh安裝英特爾加速器,作為一個單獨的、可開啟關閉的「環境」:% conda config --add channels intel % conda create --name intelpy intelpython2_full python=2運行示例程序,看到在我的 openSUSE
  • 使用Python從頭開始實現深度學習庫
    為此,可能需要將核心實現單元隱藏在幾個抽象層後面,這使得難以理解深度學習庫所基於的基本底層原理。因此,本文的目的是提供有關深度學習庫構建塊的見解。我們首先了解一些深度學習的背景知識,以了解功能要求,然後使用NumPy在python中使用一個簡單而完整的庫,該庫能夠端到端訓練神經網絡模型(非常簡單的類型)。在此過程中,我們將學習深度學習框架的各個組成部分。該庫不到100行代碼,因此應該很容易遵循。