什麼是計算機語言?專家用Python實戰回答,從一個過程的模擬開始

2020-08-28 張麟博士

計算機語言,本質上是數學語言的工程化。

那麼,什麼叫數學語言的工程化?數學語言具有非常高的抽象性,當前的計算機沒辦法理解。那麼我們需要一個中間語言來做一個中介,並且這個中介使用起來非常方便,對數學的要求也不高,這樣的中介,就是工程化。


Python語言中,有很多的語法,我不想多教科書式的去講。我喜歡帶著問題迭代。好的,那我們就開始我們的問題:

在一群人裡面,高低不同,我想讓最高的那個傢伙,走到最前面來,而且是沿著他的位置,穿過每個人走到最前面,當與某個人重合時,被重合的人就後退到最高的人的位置。就這樣一個過程,我們用計算機模擬一下。

1、用一個東西記錄高矮,變量

首先我們要有一個東西來記錄高矮。

在計算機裡稱為變量。你懂的,就是和初中那個變量x是一樣的。只是名字你可以隨便起。

在python裡,這個實在是太簡單。

比如高度是160單位cm。

下面那個print就是列印出來的意思。

運行一下,

顯示出來了,160.

多簡單啊。

在python裡,變量是可以隨便設置的,你大可不必擔心出錯。在錯誤中學習是最快的方式。出錯了怎麼辦?萬能搜尋引擎可以幫助你。

2、建立一個一群人的高矮的數據,列表

我們是模擬一群人的高矮的,個數少我們可以一個一個的定義。但是多了呢?

Python給了一個東西叫列表。

列表就是把一堆亂七八糟的東西放在一起的一個小組。

這個是一個用中括號括起來的一堆東西, 如

[身高1,身高2,身高3,身高4,衣服,香蕉]

比如,我們設置有10個人的身高列表,可以這樣定義


Pycharm用灰色的提示,你用中文不好吧,畢竟這個語言是外國人寫的。而且中文編碼比較繁瑣啊!

下面我們就用字母來替代吧!下面我們用heights替代一群人的身高。

所有存儲在變量裡的內容,我們有一個比較常用的稱謂,叫數據。

本質上程序有兩部分組成,數據和算法。

以下是一些操作。(補充一下,python的注釋是#開始的一行一行的)

按順序,列表從第一個到第十個,指標從0-9,取值


這裡使用了print的用法,裡面的參數用逗號隔開,分別顯示。如果是字符,則用單引號,或者雙引號,或者三個引號包圍。


這樣操作似乎太麻煩,這裡我們介紹一下for循環

for i in 列表:

操作

這樣的語法。

特別說明,上面的「操作」前面是一個tab的位置,或者四個空格。這個是python特有的間隔方式,用來表示不同層級之間的區分。如果「操作」是在for循環下的,所以操作要比for多一個間隔,這個間隔叫縮進。

for 循環,就是把列表中的值一個一個的取出來分別進行「操作」運算。

例如上面我們說的顯示列表中的值,

運行後是這樣的


好了,這樣我們就建立了一個一群人的高矮的數據heights。

詳細的操作,大家可以搜索,這裡不做深入的探討,我們只介紹到做到我們的模擬需要的最小知識點。

3、找到那個高個子,並且找到這個人的位置

這是我們遇到的第一個算法。如果是兩個人,我們怎麼做?

(1)先比較誰高,這個簡單,數字大的就是高個子,這個計算機會

(2)記住這個人的位置

(3)把這個高個子和其他的人比,再記住高一點的那個傢伙的位置。

如果是一群人呢,我們怎麼做?

(1)第一個和第二個比

(2)記住高個子的位置

(3)高個子的和第三個比,記住高個子的位置

(4)繼續下去

大家可以考慮一下怎麼完成。

可以先用偽語言描述一下。

什麼是偽語言?

偽語言就是不管你用什麼語言,可以描述清楚操作就可以的描述方式。

我們使用另外一種,我們先準備一個和heights一樣大小的列表,把所有的值都設定為0.

這裡介紹兩個列表操作。

(1)列表的乘法

假設另一個列表是影子,名字叫shadow

shadow = [0] * 10

這樣我們就獲得了一個含有十個0的列表shadow

(2)獲取列表是一串0-9的數字

有一個函數range(10)

不過,這個不是列表那麼簡單。但是估計這樣想吧,可以認為是類似列表的東西。

我們繼續我們的模擬,先用偽語言把要做的事說清楚。

(1) 定義一個變量height,用max函數算出最大的值賦值給height

(2) 定義一個tall_position 用來存儲位置

(3) 用for循環,取出所有的人的高度比較

for position in range(10):

如果heights[position]=height

tall_position = position

否則,不變

這樣我們就找到了那個最高的人在哪個位置。

代碼如下:


解釋一下,

Line1:就是我們的一群人的高度列表heights

Line2:用了max函數計算了heights中最大值

Line3:定義了一個tall_position用來存儲位置

Line4-8:做了一個for循環

Line5-6: 判斷position位置的人高度是不是和最高的height一樣高

如果一樣高,就把這個位置記錄下來。

Line7-8: 反之,pass,這個就是表示什麼都不做。

這裡使用了if 。。。else。。。函數,使用方法就如上面代碼一樣。

Line9:列印結果

4、讓高個子的人按順序從他原來的位置移到第一個位置。

回顧一下問題:

在一群人裡面,高低不同,我想讓最高的那個傢伙,走到最前面來,而且是沿著他的位置,穿過每個人走到最前面,當與某個人重合時,被重合的人就後退到最高的人的位置。

我們知道現在的位置是tall_position的位置。我這裡定義的向前,是指向數字小的地方。也就是從tall_position移動到0.

偽語言:

開始

Shadow =heights

for position in range(tall_position):

heights 列表的tall_position-position-1位置的值

賦值給Shadow列表tall_position-position位置的值

height值

賦值給Shadow列表tall_position-position-1位置的值

列印出列表

結束

這裡涉及到交換,如果我們有shadow這個列表了就很簡單了,只要做兩次賦值就可以了shadow[tall_position-position]=heights[tall_position-position-1]

shadow[tall_position-position-1]=height

代碼如下:

看一下運行結果:

這就是我們預想的!

那麼這個模擬我們就完成了。

這裡有一個問題,我們繼續在程序下面列印一下shadow和heights的值我們比較一下:

居然一模一樣。說明什麼問題?

大家思考一下?

說明列表在賦值的過程中其實是一個對應。也就是說,我賦值給了shadow,但是shadow不是一個新的列表,只是heights列表的另一個名字,或者說影子。影子是跟著主人變的。

備註:移動過程模擬材料:變量賦值、列表賦值、for循環、if 判斷、max函數、range函數

相關焦點

  • 什麼是計算機思維?它的強弱因人而異?南大博士用python這樣解釋
    今天下午一位大一同學向我諮詢:剛開始接觸編程的時候,為什麼那麼雲裡霧裡?其實,這個是一個思維方式的問題。我們在生活中有很多事,看起來是很自然的事,但是在計算機來看,卻不是那麼簡單。我現在的工作是做計算機中的流體力學仿真,我們在模擬一架飛機在天上飛行的時候,我們會在3D模型中把一個飛機放在空中,沒有任何支撐。
  • python語言基礎-6:程式語言是萬能的麼?
    但正如上一節課程中講道:編程的本質就是對普適的計算機進行功能特定化,而編程的具體工作則是控制輸入、輸出和計算過程。我們把標題的這個問題更加準確地表述一下:通過編程,是否能夠發揮出普適計算機的全部潛力?計算機的全部功能,表現在輸入、輸出和計算,其核心是計算。如果一個語言能夠進行任何可能的計算,它就能發揮計算機的全部潛力。我們包括python在內的大多數程式語言,都可以做到這一點,因為它們都是圖靈完備語言。
  • 編程入門選什麼語言好?C 語言還是Python?為你解析
    前面我分享過計算機行業已經成了學校選擇排名第一,家長和學生都很看好計算機類專業。現在IT行業也越來越火爆,程式設計師越來越被人看好。面對相比同齡人高薪資的誘惑,人們很難不心動,即使禿頭也值得!那麼問題來了,對剛接觸這個領域的新人來說,選什麼語言作為第一門語言呢?
  • 漫談算法設計與腳本語言(grasshopper, python)
    什麼是算法設計?在回答這個問題之前,先聊聊什麼是設計? 簡單的一句話設計就是處理內容與形式之間的關係.從一個概念開始,繪圖軟體幫助他們從抽象的概念到具體的表現。這個過程在許多領域都被採用,從工業設計到建築設計,其最終成果是由設計師的思維驅動而完成的。而算法設計的設計師對如何設置生成的過程更加感興趣.
  • 「python opencv 計算機視覺零基礎實戰」第一節
    前置條件說明:本系列opencv實戰教程將從基礎到實戰,若只是簡單學習完python也可以通過該教程完成一般的機器學習編程;文中將會對很多python的基礎內容進行講解,但由於文章定位的原因將不會贅述過多的基礎內容,基礎內容進行第一次講解後第二次將不會過多贅述,本文主要講解的是opencv相關知識。
  • 數據分析之python語言概述
    作者看著網上各種數據分析的知識泛濫, 但是沒有什麼體系,初學者不知道學哪些, 不知道學多少, 不知道學多深, 單純一個python語言, 數據分析會用到那種程度, 不可能說像開發那樣去學, numpy如果不是做算法工程師用到的知識並不多, pandas知識雜亂無章, 哪些才是最常用的功能等等, 作者不忍眾生皆苦, 決定寫一套python數據分析的全套教程, 目前已完成一部分課件的製作
  • 清華大學計算機博士:python實戰743講,即學即用
    常用的python相關的算法有哪些?好用的爬蟲工具又有哪些?網上看了很多文章,但很不成體系,有系統性的資料推薦嗎?,堅持下去你會看到一個不一樣的自己。其實沒那麼複雜,你只需要做好三件事:1、找到一個實力與經驗俱佳的「教練」,從思維、工具、實戰帶你「即學即用」。
  • 計算機語言的發展過程
    計算機發明之初,計算機只能被少部分人使用,人們需要用0、1組成的指令序列交由計算機執行,對於機器語言的使用與普及都是很令人頭疼的問題。對於程序的移植能力幾乎沒有,從而時間成本,人力成本十分昂貴。但機器語言也不是沒有優勢,由於這種語言是直接對計算機硬體進行操作,所以在特定型號的計算機上面,運算效率也是很高的,機器語言的出現對於未來的計算機語言發展起到了很好的推動作用,所以機器語言也是第一代計算機語言。   2、彙編語言   彙編語言是在機器語言的基礎上誕生的一門語言,用一些簡潔的英文字母、符號串來替代一個特定的指令的二進位串,這也提高了語言的記憶性和識別性。
  • Python語言到底難不難?
    我不是專業程式設計師,也沒用Python做過什麼大項目,只是每天享受Python帶來的便捷與快樂。樓主所說的不能深入理解,其實是不願意花時間鑽研。用了十幾年Python,現在也要一直翻看官方文檔和一些第三方module的文檔,不斷把遇到的問題弄懂弄透,學習不就是這個過程麼?
  • 慢步python,如何用python語言創造出一個真正的獨立exe程序?
    我們學習編程,終極目標還是編寫一個獨立的應用程式。獨立的應用程式應該像QQ,微信一樣不依靠其他程序運行,只有平臺支持,就可以運行。從這個意義上說,所用應用程式都是基於作業系統運行的。那麼如何用python語言創造出一個真正的獨立的應用程式?就是我們電腦上的exe程序?
  • Python之父:並非人人都需要了解計算機發生了什麼
    這也是Guido van Rossum發明python的出發點之一,將程式設計師的時間成本在語言中進行考慮,這使得python在傳播的過程中流露出一種社會哲學。Van Rossum在和別人談論python時非常支持一個觀點,那就是多花一點時間,讓你的代碼在將來更容易被別人理解。
  • 清華計算機流出:Python415集視頻教程+電子書籍大合集
    如果你想要編寫高質量、高效的並且易於與其他語言和工具集成的代碼,《Python學習手冊:第4 版》將幫助你使用Python快速實現這一點,不管你是編程新手還是Python初學者。本書是易於掌握和自學的教程,根據作者Python專家Mark Lutz的著名培訓課程編寫而成。
  • Python語言是什麼?python框架有哪些?Python基礎教程
    Python語言是什麼?Python是什麼,Python可以做哪些Python是一種跨平臺的電腦程式設計語言,是一種面向對象的動態類型語言,最初被設計用於編寫自動化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越來越多被用於獨立的
  • Python到底能做什麼?
    一、Python能做什麼?這個問題對於外行或者剛入門的小白問的最多,到底能做什麼呢?其實這個問題和回答程式語言能做什麼一樣。但很明顯,大家主要想知道的是python常見的用途或領域是什麼?人工智慧雖然使用python語言較多,但是python只是其中的一個簡單基礎,裡面實際運用的數學和算法,入門門檻極高。那有人會問,如何什麼比較好,我個人推薦是java(純屬個人建議),具體不做展開,有機會可以介紹java入門。
  • 不可阻擋的超級語言--python
    很多人都聽說過一句話:人生苦短,我學python。這句話的來源是什麼?為什麼要學習python? 樹哥今天來聊聊python這個話題。什麼是python?python是一們計算機程式語言,也就是一門編寫計算機軟體的工具。python的中文釋義是蟒蛇,名字其實沒有什麼含義,只是因為它的發明者Guido喜歡的一個電視連續劇的名字叫month python而已。
  • Python的執行過程
    解釋型語言和編譯型語言計算機是不能夠識別高級語言的,所以當我們運行一個高級語言程序的時候,就需要一個「翻譯機」來從事把高級語言轉變成計算機能夠讀懂的機器語言(二進位)的過程,這個過程分為兩類,第一種是編譯,第二種是解釋。
  • Python見效快,Go周期長,學那個更有錢景?語言生態的圈地運動
    1991年著名的計算機語言大神Guido van Rossum開發並發布了Python。16年後,2007年穀歌三位計算機語言學家開始開發go語言。一個是29歲的python一個是13歲的go,在當今網際網路和基於計算機集群的軟體和虛擬產品領域稱雄世界,那麼,跟誰混才更有「錢」景呢?今天我們聊一聊,go和python的發展前景問題。
  • 復旦大學計算機系推薦:986集編程視頻+python電子書
    如果你想要編寫高質量、高效的並且易於與其他語言和工具集成的代碼,《Python學習手冊:第4 版》將幫助你使用Python快速實現這一點,不管你是編程新手還是Python初學者。本書是易於掌握和自學的教程,根據作者Python專家Mark Lutz的著名培訓課程編寫而成。
  • Python語言入門(1)-python語言裡有哪些東西
    在使用過的程式語言中,python是我最喜歡的語言 。程式語言數量很多,python適合作為編程入門的首選語言,它也不愧為眾多職業程式設計師使用的語言,最近幾年更是成為不少專業領域的科研人員鍾愛的程式語言。可是Python不是我學編程的入門語言 - 當初沒遇到講python入門的書籍或老師啊。
  • python自學行嗎?python學好了能幹什麼-開課吧
    人生苦短,我用python.最直接的學習方法是,用Python來解決一個你真正想解決的問題。在解決這個問題的過程中,有不懂的就去查就去問,直到這個問題被徹底解決為止。計算機語言也只是一種語言而已,和我們學習其他語言的方法沒有什麼根本區別。只看教材是學不會新語言的,而且很容易忘掉。