顯示具有 Python 標籤的文章。 顯示所有文章
顯示具有 Python 標籤的文章。 顯示所有文章

2019年8月14日 星期三

線上學習程式設計的好站推薦

隨著108課綱將程式設計納入,

程式語言已成必修之語言,

然而初次接觸程式語言的學生要如何學習呢?

除了從老師的課堂上學習以外,

網路上還是有許多優質的線上教學,

這就是今天的主題:

線上學習程式設計的好站推薦


Scratch

美國麻省理工學院(MIT)的媒體實驗室所推出,

專門設計給小朋友學習的程式設計語言 ,

讓小朋友以熟悉的堆積木方式更快進入程式語言的世界,

是培養「運算思維」更好的學習平台。

           
以積木堆疊方式來設計程式,

學習者使用拖拉的方式組合出希望的結果,

既簡單又方便,

除了預設的積木行為以外,

Scratch有提供讓使用者自訂積木功能,

在程式設計上補足了預設積木所沒有的情境,

對於學習者來說,

不需要去撰寫程式原始碼。


Code.org

一個非營利組織,

主要服務對象以4歲以上為主,

讓使用者在遊戲中學習程式,

而且支援多國語言。




跟Scratch 的主要差異在:

Code.org著重於讓使用者學習基礎的邏輯概念,

而Scratch隨著複雜度的提高,

使用者相對需要更精密更完善的思考,

偏重於運算思維的學習。


Snakity.org

透過簡單易懂的講解及100 題精闢的練習,

只要辦一個帳號就可以線上擁有不錯的練習空間,

照著它提供的解說和範例一路練習下去,可以打好 Python 的基礎。


課程透過Step-by-Step方式演示程式運行情形,

讓使用者在學習過程中,

更能了解該程式碼中,

每個變數的變化,

同時在每個課程都有腦筋急轉彎的練習題,

要學好程式設計,就從實際練習開始。


Codepen

一個網站前端設計開發平台,

可以透過一個簡化的測試用例來演示並找出 Bug也可找出特定的設計模型。



初學者可觀看其他人分享的原始碼,

觀摩其做法來學習,

同時也能夠線上即時檢視程式執行的結果,

讓修改過的原始碼能夠即時呈現更改的情形。

由於JS、CSS與HTML三者各佔有一個區塊,

當程式碼較多的時候,在閱讀上就比較不方便。






Repl.it

隨地隨時編程是件愉悅的事,

可學習語言有Python、C++、C#、JavaScript,

也支援中文輸出。



除了支援各式不同的程式語言以外,

最重要的是只要有網路就能夠線上程式設計,

不需要另外建立開發環境,

可使用Fork方式直接使用其他人分享的專案來修改,

也能以分享方式將程式碼發到社群網站上,

當然對程式設計最有幫助的應該就是輔助工具了


如上圖,

當今天要使用某個函式,

repl.it會跳出提示視窗將其語法資訊告知使用者,

它已不算單純的線上程式設計平台,可說是線上IDE平台。


各家網站功能比較



Scratch
code.org
Snakity.org
Repl.it
Codepen
openedu
中文介面
x
v
x
x
x
v
code撰寫
x
x
v
v
v
v
影片教學
v
v
v
x
x
v
過程演示
v
x
v
v
x
v
執行結果
v
x
v
v
v
v
線上解題
x
x
v
x
x
v


多元學習並非壞事,

但在競爭激烈的社會風氣下,

反倒對學生及其家長就是一種負擔。






2019年2月10日 星期日

利用Pycharm建立一個新的Django專案


 之前提過Django的環境建置,

今天就


利用Pycharm建立一個新的Django專案


一般而言應該是用命令列方式新增專案,

為了開發方便,

就以Pycharm作為範例.

首先在歡迎畫面選擇 Create New Project


接著在跳出的視窗左手邊選擇Django專案,

並在右側設定好專案存放位置與虛擬環境virtualenv,


設定完畢按下Create就能看到如下圖的檔案結構

manage.py為Python命令稿,提供建置app ,   啟動server/shell等功能

demo1與專案同名的目錄,同時也是專案重要檔案放置位置

venv為虛擬環境的設定資料夾,

templates為網頁模板的預設資料夾


settings.py為專案的設定檔,

其中幾個較為重要的設定有:


BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

這是表示專案的基本路徑,

之後要新增資料夾可利用底下命令

os.path.join(BASE_DIR, 'templates')


DEBUG = True
除錯模式預設是打開的


INSTALLED_APPS
可以設定想安裝的應用程式


ROOT_URLCONF = 'demo1.urls'
這個設定檔決定了瀏覽器中要求的URL位址對應到哪個頁面

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),    }
}
預設資料庫default採sqlite3,
是Django內建,

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
這是語言與時區的設定,

台灣的話,

建議使用

LANGUAGE_CODE = 'zh-TW'
TIME_ZONE = 'Asia/Taipei'

2019年2月1日 星期五

Python 與 物件導向三大特性


Python本身就是物件導向的程式語言,

說到物件導向就不能不提到其有名的三大特性,

今天就簡單來闡述下

Python 與 物件導向三大特性


物件導向的三大特性分別是


  • 封裝
  • 繼承
  • 多型


封裝

簡單的說將同一類或者同一物的資料與運算打包起來,

就稱之為封裝


以Python為範例,

上面建立了一個矩形類別

class Rectangle:
    def __init__(self, length, width):
        self.length = length
        self.width = width

    def area(self):
        print("area = ", self.length*self.width)

    def Perimeter(self):
        print("perimeter = ", 2*(self.width+self.length))

要求矩形的周長與面積,

如果以函式的話,

勢必得要有兩次長度與寬度的資料傳入函式,

而封裝起來的物件,

僅需要直接調用定義的方法(Method)即可

myrectangle = Rectangle(4, 2)
myrectangle.area()
myrectangle.Perimeter()



繼承

則是將多個類別的相似處設為一個基礎類別,

各類別再針對個別特性從基礎類別去做延伸,

以貓狗為例子,

class Cat:
    def __init__(self, name):
        self.name = name

    def jumps(self):
        print("jump")

    def runs(self):
        print("run")

    def shout(self):
        print("my name is " + self.name + " meow ")

將定義其跑,跳,叫聲的類別以Python寫出來如上,

同樣在定義狗的時候,

卻重複了跑與跳,

寫兩次雖說不是不可以,

但這就是多餘的,

更何況若有多個類似物件,

重複的步驟可就多了,

這時候就可利用繼承方式將不一樣的挑出來

class Pet:
    def __init__(self, name):
        self.name = name

    def jumps(self):
        print("jump")

    def runs(self):
        print("run")


class Dog(Pet):
    def shout(self):
        print("my name is " + self.name + " bow-wow ")


class Cat(Pet):
    def shout(self):
        print("my name is " + self.name + " meow")

由於貓與狗只有叫聲不同,

將跑與跳定義為Pet類別,

在定義貓與狗時,

分別繼承Pet類別即可


多型

mycat = Cat("May")
mydog = Dog("Lucky")

mycat.shout()
mydog.shout()

多型讓子類別(貓與狗)呼叫同名的方法(Method      shout)時

呈現各子類別不同之處(貓叫與狗吠)

即有名的   duck typing,

"走路像鴨子,叫聲像鴨子,那它就是鴨子"


例如牛也能有叫聲,

它僅需要在類別中定義shout方法即可

也就是說不在乎是哪一種物件呼叫了同名方法,

只需要該物件有定義此同名方法就好了


2019年1月23日 星期三

Python的套件管理程式pip與虛擬環境virtualenv


安裝完Python之後,

直接就可開始寫程式,

隨著需求的不同,

會需要不同的套件,

這時就需要由套件管理程式來幫忙安裝這些套件,


套件管理程式pip

pip是Python的套件管理程式,

可針對套件進行安裝,   更新 , 移除   等等,

藉由統一管理以避免個別安裝時發生錯誤,

如果是Python   2.7.9   以上的版本,

安裝完Python之後,

pip就同時安裝完畢,

不須自行安裝,



手動安裝也很簡單,

官方網站根據說明下載文件:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

之後再執行

python   get-pip.py

即可完成手動安裝.

至於使用Ubuntu的話,

可直接以底下命令安裝:

sudo apt-get install python-pip


更新pip程式的話,

則是打:

pip install   -U  pip


幾個比較常用的pip命令:


pip   list

執行這個命令可顯示目前已安裝的套件以及版本資訊


pip   install   套件名稱

這是用來安裝套件用的命令

解除安裝也很簡單:

pip   uninstall   套件名稱


如果要升級某個套件則是用:

pip install   --upgrade   套件名稱



基本上常用的命令就這幾個,

如果還想知道其他命令,

可打上:

pip   help  

 查詢其他命令



虛擬環境virtualenv

在程式的專案開發中,

有時並不是一個人就能完成專案,

而在協同開發時,

每個人的環境設定不一,

這時就必須依靠虛擬環境來協助各成員進行環境建置,

或者不同的專案所需要的套件各不相同,

透過虛擬環境也可避免不必要的相依性問題,

這裡以virtualenv作為範例做介紹,


首先當然是得安裝此套件,

利用上述的 pip  套件管理程式安裝:

pip install   virtualenv

安裝完畢以後,

切換到需要使用虛擬環境的資料夾執行

virtualenv  venv

程式就會自動建立一個獨立的環境

透過

source   venv/bin /activate

如果再命令提示字元前面出現(venv)就表示已在新建立的虛擬環境中了,

若是要離開虛擬環境只需要打上:

deactivate

   即可


在多人協同開發時,

環境的建立有兩種方式,

一種是將虛擬環境的資料夾壓縮並分享給其他開發成員,

成員各自解開後,

透過上述的:

source   venv/bin /activate

就能建立與自己相同的環境,

另一個方式則是利用

pip   freeze   >   requirements.txt

產生 requirements.txt

再以:

pip install   -r   requirements.txt

就能讓其他開發人員建立相同的開發環境




2019年1月20日 星期日

Python的集合物件


除了 基本型態與C語言或多或少有點差異,

Python在處理資料的集合有其長處,

可分別透過下列不同的資料型態來做資料處理,

Python的集合物件



List 清單


清單的特徵是中括號 [],

所有資料都可擺放在裡面,

彼此以逗號隔開,

而且這些資料都有順序的

例如:

lst['testitem' , 100 , 'hello']


lst[0]就代表 'testitem'
lst[-1]就是倒數第一個資料'hello'
也能夠使用 lst[1]=200   直接改變清單中的值,


元組Tuple

它與清單相似,

都是有順序的,

但每個資料都不可改變,

特徵是小括號 () ,

同樣也是以逗號格開,

如果元組只有一個資料,

為了避免與運算元的括號混淆,

通常會多加一個逗點,

以表示該資料為元組

例如: 

test =   ( 2, )


字典Dictionary

最大的特徵就是每個資料都是一個key值對應一個value,

並以大括號 {}    包住,

例如:

dic   {  'name': 'xyaw' , 'age':30 }

取用資料則以中括號包住key來取值

dic ['name']   就代表著   'xyaw'

特別要注意的是

字典的key是不可變的資料,

而所有資料都能當值


用集合物件處理資料有何好處呢?

當今天某個學生修習了十門課,

每科分數分別為

class1 =   90
class2 =   78
class3   =   85
.......................
求總分時

十門課要寫十個變數的加總,

如果以清單將資料整理為

class[90,78,85 ......]

只需要利用

sum(class)

就能得到總分

在學生與課程資料少的時候還看不出差異,

如果學生的課程資料上百筆的話,

計算總分時使用集合物件處理的資料還是只有sun()一行而已








2019年1月12日 星期六

從資料型態看Python與C語言的差異


身為一個程式設計師,

接觸多種程式語言是一件很正常的事情,

但不是軟體研發工程師就得十項全能,

雖說邏輯是不變的,

但各家程式語言可不是抄來抄去的,

各有所長

今天就

從資料型態看Python與C語言的差異




整數(Integer)與浮點數(Float)


在做數字的四則運算(加減乘除)時,

最常使用到的就是整數與浮點數,


上圖為Python執行四則運算結果,

可以看到C與Python第一個不同點

就是Python每一行的結尾不需要分號(semicolon)

一般而言

C語言的

int                  4 byte
long   int   8 byte       



而Python

int            8 byte
long int   基本上沒有限制,

而浮點數一般都為 8 byte

這裡就必須提到第二個不同點,

Python是不需要特別對資料型態做宣告的



布林值(Boolean)


也就是真假值,

True代表真,

False代表假,

通常用在邏輯運算中,

例如上圖的 If-else  ,

這時Python 與 C 第三個差異也出現了,

If-else 為例子,

Python的描述是以冒號開始,


而C是以括號作為條件描述區隔


字串(String)

在C裡面一個符號叫做字元(Character),

以單引號表示

多個字元的序列就叫做字串(String),

以雙引號表示

Python中沒有所謂的字元,


就將它看作長度只有一的字串,

在Python中,

以雙引號 或者單引號表示一個字串,

是沒有分別的,

也就是說

" Hello World "
' Hello World '

這兩者在Python裡是一樣的,



以上就是今天的主題,

從資料型態看Python與C語言的差異