【scratch】class_5_編程基礎知識

在scratch的學習過程中,我們需要掌握一些編程的基本知識,下面給大家逐一介紹

數據類型 Data Type

實際編程環境中會涉及很多數據類型,但在scratch中數據類型基本就三種:數字、字符串和布爾

數字 Decimal

輸入一個數字很簡單,在任何橢圓形的輸入框內都可以輸入數字。scratch甚至提供了專門的運算工具來處理數字
運算
我們注意到在絕對值的指令塊的下拉選項中,還有很多數學函數,包括三角函數、反三角函數、指數函數和對數函數,這些是高中數學中要學的東西。

隨機數 Random

這些指令塊中還有一個比較特殊的是隨機數,它用於生成一個1-10之間的隨機整數。想一想,如果我們想生成一個任意區間之內的隨機數,應該怎麼操作?比如我想生成1-100之內的隨機數。
隨機數
生成1-100的隨機數

  • 首先,系統只提供了1-10的隨機數,我們用這個隨機數乘以10,就得到了10-100的10的倍數
  • 然後,用1-10的隨機數減1,就得到了0-9的隨機數
  • 最後用第一步的結果減去第二步的結果,就得到了1-100的隨機數。
    1-100的隨機數
    那要想得到1-1000呢,同理,用上面的結果乘以10,再減去0-9。想得到1-10000呢,用1-1000的隨機數乘以10,再減去0-9。依次類推。

二進制、十進制、十六進制 Binary Decimalism Hexadecimal

  • 我們日常生活中用到的數字都是十進制的,爲什麼呢,因爲我們人類有十個手指頭,最初的計數就是數手指。然後阿拉伯數字1-10代替了手指的功能。

  • 計算機只“認識”二進制的數字,也就是隻認識0和1。爲什麼呢,因爲計算機是集成電路組成的,電路需要開關來控制,而開關只有“開啓”和“關閉”兩個狀態。而二進制中的1就代表開啓,0就代表關閉。

  • 除了二進制外,還有八進制,十六進制。因爲二進制雖然簡單,但是計數起來位數很多有點麻煩,所以就有了八進制和十六進制,一般用於位計算和編碼。

  • 這裏僅以十進制、二進制和十六進制的對比來說明它們的計算方法
    二進制十進制十六進制對比

字符串 String

在任何輸入框中也能輸入字符,包括英文字母、漢字甚至其它語言文字。scratch也提供了專門處理字符串的方法
字符串

布爾 boolean

布爾型的變量只有兩個值,true或者false(真或假)。就像它的值一樣,布爾型的變量用於判斷真假。
比如 (1+2=3),這句話是真的,是true;(1+3=2),這句話是假的,是false.

在scratch中所有“六角形”的代表的值都是布爾型的變量。
true
false

邏輯運算

就像數字有加減乘除四則運算一樣,布爾型的變量也有自己的運算,叫做邏輯運算。
最基本的邏輯運算包括與、或、非

操作名 英文名 操作符 舉例 總結
and & true&true=true; true&false=false; false&false=false 全真爲真,有假爲假
or | true|true=true; true|false=true; false|false=false 全假爲假,有真爲真
not 在這裏插入圖片描述 真變成假,假變成真

在scratch工具中,與、或、非對應的命令是:
與或非
一切六角形的孔中都可以鑲嵌布爾型的積木塊

  • 一個與操作的例子,找出1-100以內所有能被3整除的單數。能被3整除意思是這個數除以3的餘數等於0;單數意思是這個數除以2餘數不爲0
    能被3整除的單數
    可以看到,其中“不等於0”這個判斷就是用“不成立”這個命令實現的。

數據結構 Data Structure

以下兩種數據結構在之前已經介紹過了
數據結構_數組和列表

數組 Array

列表 List


對象 Object

在scratch中,對象最直觀的表現就是角色。
一個角色有:
角色名稱,x座標,y座標,顯示/隱藏,大小,方向
角色
以上這些可以稱爲角色的屬性。

一個對象,最主要的特點就是它的屬性,以及對於它的屬性的改變的操作。
所以,世界上任何一個物體都可以是一個對象,它都有自己的屬性。
比如一個人,他有年齡,有身高,體重,長相等等。
比如一部手機,它有尺寸、使用壽命等等。
當我們瞭解了現實世界中物體的屬性後,我們就可以用編程的方法把它抽象爲一堆數據

比如在打磚塊的遊戲中,我們爲磚塊建立的“僅適用於當前角色的變量”,就屬於磚塊的屬性。
磚塊的屬性


流程控制 Process Control

流程控制,簡單來講就是根據條件的判斷,使程序運行到不同的分支上去。
例如:我明天準備去旅遊,但前提是明天不要下雨,如果明天下雨,我就不去旅遊了;如果明天不下雨就去。這就是一個根據某個條件來決定接下來的進程的例子。

順序結構

順序結構就是程序執行過程中沒有分支,比如用上面的例子來做順序結構,明天下不下雨我都要去旅遊

Created with Raphaël 2.2.0開始去旅遊結束

選擇結構

選擇結果需要有條件來使程序分支執行,條件成立時和條件不成立時程序會走不同的路徑

Created with Raphaël 2.2.0開始去旅遊下雨?不去yesno

循環結構

循環結構顧名思義,就是需要重複執行某個操作,分爲有條件的循環和無條件的循環。有條件的循環在條件成立或者不成立時循環就要停止,而無條件的循環會一直循環下去,直到程序被強制結束。
比如上面的例子,如果下雨我就等待,一直等到不下雨爲止

Created with Raphaël 2.2.0開始去旅遊下雨?等待雨停去旅遊yesno

輸入、輸出 Input/Output

  • 輸入與輸出是計算機的基礎功能,方便我們與計算機互動。
  • 輸入就是我們要通過什麼方式告訴計算機做什麼;輸出就是計算機告訴我們它做了什麼。
  • 常見的輸入設備包括鼠標、鍵盤、麥克風、攝像頭、手寫板、觸摸屏、遊戲手柄等,這些設備都是要捕捉人類的操作,把這些操作變成指令傳遞給計算機。
  • 常見的輸出設備包括顯示器、打印機、耳機等,這些設備將計算機的工作展示給我們。

在scratch中,可以捕捉我們的輸入的操作有很多,
輸入輸出
關於這些命令的應用,在之前的小遊戲中已經介紹過,在此不做贅述。
參看以前的小遊戲

這裏主要說一下“詢問”和“說”的命令,它可以幫助我們和計算機進行“對話”,程序需要根據我們的輸入進行判斷時,就需要詢問
詢問

此外還有錄音的功能,可以把我們自己的聲音用在作品當中
錄音

I/O

Input/Output的簡寫,I/O可以簡單的理解爲文件的導入和導出,這也是輸入和輸出的一部分。大部分的計算機軟件都有I/O的功能,以幫助我們處理文件。

我們曾經說過,計算機是用來處理數據的,而數據在計算機上的具體表現,就是數據文件。一段文字,一張圖片,一個視頻,都是文件。可以說我們處理數據,其實就是在處理各種數據文件(當然也不是所有的數據都會生成文件,比如網絡IO,這個以後再說)

在scratch中,我們保存自己的作品到電腦上,就是導出文件;而從電腦中上傳,就是導入文件。
此外,我們導入一張圖片作爲背景或者角色,導入聲音作爲素材,都是導入文件。
角色和背景的導入導出
角色也是可以導出的,而且導出的角色中不止包含造型,還包含代碼,比如我們把曾經做過的打磚塊遊戲中的“磚塊”角色導出
磚塊
注意,導出操作可能會出現下面這個錯誤,但是並不妨礙導出結果的生成,只要忽視它就好了
導出錯誤
他會生成一個.sprite3爲後綴的文件,我們可以在別的項目中導入這個角色,就連它的代碼一起導入了
導入角色
所以這個功能可以幫我們複製我們寫過的複雜的代碼,複雜的東西寫一遍就可以了,以後只需要不斷的完善

甚至列表也是可以導入和導出的,比如我們把上面例子中1-100以內的3的倍數的單數全部導出。
導出列表
我們也可以按照它的格式,自定義一個列表然後導入進來,比如我們隨便寫一個偶數數組
偶數數組
然後建立一個空的列表,就可以導入這個數組了
導入列表


監聽 Listening

監聽是一個被廣泛應用的計算機功能,但是可能有很多同學沒有聽說過。比如上面講到的大部分輸入操作,都要用到監聽的功能。

簡單來說,監聽就是計算機一直在“監視”你的操作,一旦你做了某個操作,它必須立即迴應你。比如你按下鍵盤鼠標,程序就“看到”你按下了鍵盤鼠標,它就會有動作。

scratch中的監聽大概分爲以下三類,一般監聽事件都要用到無限循環操作。

鍵盤鼠標

顧名思義,監聽我們的鍵盤鼠標操作
鍵盤監聽

想一想,爲什麼我要在程序中加一個“等待0.2”秒的操作

消息廣播

這個功能之前在打磚塊的遊戲中用到過,當球碰到磚塊時,我們通知球轉向。
發出通知
接受通知
這裏我們再做一個小功能,令一名老師問一個學生100以內的加法,看是否能回答正確

  • 老師的代碼
    老師的代碼
  • 學生的代碼
    學生代碼
  • 效果是這樣的
    加法回答

事件

其實鼠標鍵盤操作都可以稱爲事件。scratch中還提供了很多其它的事件,比如:
事件


函數 Function

在編程過程中,對於一些複雜的邏輯編碼,我們希望它們能夠被重複應用。於是我們把它們“打包”成一個個的代碼塊,這種被打包的處理某個複雜邏輯的代碼塊就叫做函數
函數有幾個要素:函數名,參數,返回值
scratch中通過自定義積木,實現了函數的功能。
我們自定義一個判斷輸入年份是否是閏年的函數
判斷閏年
可以看到,我們的回答作爲參數傳遞到了函數內部進行計算。所以,對於使用函數的人來說,他不用關心函數內部的實現方法,他只需要關心的在使用函數時傳遞正確的參數。

當然一個函數是可以傳遞多個參數的,比如我們定義一個計算兩數相加或者相減的函數,當布爾值傳入true時就把兩數相加,傳入假時就把兩數相減
相加
加減法運算
有同學可能注意到自定義積木時有一個選項是“運行時不刷新屏幕”,這個功能是幹什麼的呢?
要回答這個問題我們可以看一下之前做的打磚塊小遊戲,還記不記得在繪製磚塊的克隆體時出現了一個現象,就是30個磚塊的克隆速度其實很慢,是一個一個克隆出來的,以至於球都飛出來了,磚塊還沒有克隆完。那這個問題怎麼解決呢?克隆速度
我們可以把磚塊克隆的代碼打包成一個函數,然後勾選執行時不刷新屏幕,就可以解決這個問題了
函數打包代碼塊
修改後可以試一下,發現30個磚塊被瞬間克隆出來。原因是,克隆時,會重新繪製舞臺,這很耗時間,所以把重繪舞臺關閉就節約了時間。

一個函數執行結束後,是可以有返回值的,可惜的是,scratch中並不提供這樣的功能,以後再講其它編程語言時,會再提及

以上就是關於編程的一些基本知識,對於從沒有接觸過編程的同學來說,還是很新鮮的,希望同學們在學習scratch的過程中可以掌握這些知識。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章