顯示具有 程式設計 標籤的文章。 顯示所有文章
顯示具有 程式設計 標籤的文章。 顯示所有文章

2023年4月1日 星期六

好用的程式開發工具 Visual Studio Code

工欲善其事,必先利其器,

作為一個程式開發人員總是會用到 IDE 來輔助開發,

今天則是要來介紹這款

好用的程式開發工具 Visual Studio Code

Visual Studio Code 作為一個 IDE,

除了支援各式不同的平台之外,

也支援多重程式語言,

舉凡從 JAVE、Python、JS、C/C++ 等這些常見的程式語言都有支援,

至於 Windows 或者 Linux 類型的平台同樣也能正常運行


前往官方網站下載要開發平台的版本就能夠安裝 VS Code,

點選下載之後官方網站會將畫面轉至線上的說明網頁,

初次使用的話可以稍微看一下


IDE 除了支援程式碼自動補全之外,

其他像是語法以顏色突顯 ,

或是 Git 等這些與程式相關的功能一應具全


微軟的 Visual Studio Code 這套 IDE 屬於免費的軟體,

與同為旗下的 Visual Studio 2022 不同,

功能上較為簡易,但該有的功能不會少,

甚至在 Ubuntu 上執行都沒有問題,

作為一個程式設計師也能考慮使用此種 IDE 來輔助開發,

最後附上簡單的說明,

還沒有訂閱的朋友記得點選影片右下較訂閱來支持本站頻道




2022年8月16日 星期二

淺談幾種程式語言的 I18N處理

i18n 來自於 internationalization,字母 i n 中間共有18的字母,也就是國際化的意思。

底下列舉幾個程式語言在多國語言處理的原理,

基本上就是要將原始程式碼需要翻譯的字串改成轉換為各國語言的程式碼,

這部份各程式語言大同小異,之前也有介紹過 Django 的i18n處理,

底下就來看看

淺談幾種程式語言的 I18N處理

JAVA部分 (參照原始網址)

尚未有語系相關設定的文字訊息

程式改寫多國語言後為下圖,原始碼分成三部分,最上部根據執行的參數選定要使用的屬性檔,中間部分決定選用的語言,最底下則分別印出該語言的訊息


Python部分 (參照原始網址)

自行加入語言檔案於 locale/zh_Hant/LC_MESSAGES/demo.po

msgid “這是程式字串的id (多半都以英文為基礎)”

msgstr “翻譯的文字放此



修改此 po檔案中的字串資料,再用命令 build.mo檔:

python msgfmt.py -o locale/zh_Hant /LC_MESSAGES/ i18n_demo.mo demo.po

原始碼:


最後使用命令

export LANG=cn && python i18n_demo.py

就可輸出相應語言的文字


C#部分 (參照原始網址)

要將屬性欄的 Localizable 打開,



為各個語言新增資源檔案,例如德文使用' MainForm.de-DE.resx '

需要有 resource manager 來轉換資源檔中的字串:

public class ResourceManager

{

    public static string GetString(string data, CultureInfo cultureInfo)

    {

        return CommonResource.ResourceManager.GetString(data, cultureInfo);

    }

}

再透過 resource manager 提供的方法將 Label的顯示文字改為目前的語言:

myDisplayLabel.Text = string.Format("{0}", ResourceManager.GetString(FIXED_TEXT, CultureInfo.CurrentUICulture));

結論

以上就是幾個程式語言關於 I18N的處理方式,

基本上大家的方式都差不多相對的只是做法上些許的差異,

當然這些例子僅是淺談下原理而已,

實作部分得看各個專案的情況不同複雜度也相對不同,

此處僅是讓大家對多國語言的處理有個基礎認識

2019年12月3日 星期二

Python的可變參數


在函式中難免需要使用到參數,

而這些參數可以是固定的也能夠為可變的,

今天就來介紹下:

Python的可變參數

當然開始以前,

先來了解下何謂參數與引數?

例如:

def test_sum(a,b):
    return a+b
c=6
d=9    
test=test_sum(c,d)
print(test)

在此處 a ,b 即為所謂的參數,

而 test=test_sum(c,d) 中,

c,d 則為所謂的引數,

參數與引數的差異就在此處,

參數為函式定義傳入的變數,
引數為呼叫函式時使用的變數。



有的時候,

傳入的參數不見得為固定的數量,

這時透過可變參數的方式來撰寫 Code,

是一個不錯的做法,

例如:

在此範例中,

可以知道可變參數本身為一個 tuple,

透過這個 tuple 將不同數量的數字接收進入函式,

再透過 total_sum 來求得各變數的總和,

有興趣了解過程的,

可以點選範例中的 Back/ Forward 來了解程式的運作流程。

如果要傳入的參數本身已經是List ,

當引數的時候,

直接加上星號即可,

例如:



在此範例中,

test_list 加上 * 號,

就能夠作為可變參數傳入函式。

這就是今天的主題:

Python的可變參數

2019年9月27日 星期五

程式視覺化工具 Python Tutor


要學好程式語言,

除了要有基本邏輯概念以外,

練習是精通程式語言的最佳辦法,

除了透過線上解題系統自行練習以外,

用程式視覺化工具幫助學習,

這就是今天的主題:

程式視覺化工具 Python Tutor


Python Tutor是一個線上工具,

它提供一個線上撰寫程式的平台以外,

也能將事先寫好的程式碼,

分享給其他人當作範例,

最重要的是它提供控制按鈕讓使用者能逐行執行程式碼,

並顯示記憶體中變數與物件的變化,

藉由觀察變數與物件的實際值,

幫助初學者學習。

 從Python Tutor首頁進入之後,

可看見撰寫程式碼的編輯器,

底下有兩個按鈕,

左邊功能為產生範例程式,

右邊則是讓使用者能線上撰寫程式,

底下是一個程式演示的範例:


可以看到使用者能夠透過左下方的back與forward控制程式執行,

而記憶體中的變數與物件則會即時反應在右半的frame中,

輸出畫面的資料會顯示在右上角。

初學者憑空想像與觀看實際值的變化,

當然是視覺化演示的範例程式來的效率高,

系統會輔以雙色箭頭分別代表目前執行(綠色箭頭)與下一行要執行(紅色箭頭)的程式碼,

使用者能一邊控制程式碼執行,

一邊觀察變數與物件的變化。

至於範例程式如何演示,

底下附上一個範例程式讓大家玩下:



49選6大樂透選號程式,

會在 1 ~ 49 間,

取六個不重複的數字














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年5月2日 星期四

程式開發的版本控制- Git 合併提交rebase


之前提到程式開發的版本控制- Git 應用篇,

Git的功能強大可不是只有這些,

今天就來介紹一個

程式開發的版本控制- Git 合併提交rebase


首先到命令列打上

git log

系統會列出commit的紀錄,

若今天想把最後的三個紀錄合併為一個提交commit時,

就需要利用

git   rebase -i   'commit 紀錄'

或者

git   rebase -i   HEAD~~~

來進行

系統會列出這段期間的所有commit,

底下範例中有三個提交



各個紀錄前方系統預設帶入pick,

將最後兩個commit紀錄前方的pick改為squash,

squash在此的意義為

採用此commit並將其合併到上一個commit中,

也就是說此commit所做的任何改變都會被合併到上一個commit中



編輯完畢之後,



ctrl  +  x

離開,

系統會出現確認視窗,

選擇Y之後離開


Git就會自動將選定的commit所做的變更加到第一個commit中,



如果遇到衝突,

在解決衝突之後,

執行

git   rebase   --continue

就能繼續未完成的rebase工作


接著執行

git   push --force

強制上傳到server上即可,




如果不想git紀錄太過凌亂,

可透過合併提交將一個或者數個commit合併

2019年3月27日 星期三

利用 Requests 套件送出 HTTP請求


除了 Python 內建的模組 urllib2   可傳送HTTP 請求以外,

其他有許多套件可達到此功能,

今天就

利用 Requests 套件送出 HTTP請求


在程式設計前,

要先匯入模組,

才能在 Python   使用


import   requests


常用的HTTP請求有 GET  與   POST,

底下為一個最簡單的GET請求:


requests.get("網址url")


在程式設計時候,

可取得狀態碼判別該HTTP請求是否成功,

status _code    =    200    表示請求成功,

如果狀態碼介於400~500之間,

表示請求錯誤



可藉由 if-else   來判別請求成功或失敗,


r   =   requests.get("網址url")

if r.status_code   ==  200
        print("成功")


除此之外,

也可以傳送帶有參數的 GET 請求

例如:


req_params   =   {  'key1': 'value1','key2':'value2' }

r   =   requests.get   ("網址url", params=req_params)



這相當於在瀏覽器打上

網址url?key1=value1&key2=value2




GET請求加上參數的方法屬於URL參數,

也就是從網址可看到的,

POST則是以HTML表單方式送出,

一個簡單的POST請求長這個樣子:


req_params   =   {  'key1': 'value1','key2':'value2' }

r   =   requests.post   ("網址url", data=req_params)



送出要求之後,

伺服器可針對要求進行回應,

而取得回應資料也很簡單,



可透過

r.text

取得,



除此以外,

可利用

r.content

 取得沒有解碼的二進制內容,



或者可以

r.raw

取得最原始的回應內容



伺服器若透過JSON方式回傳資料,

可利用

r.json()

解析JSON資料,



r.text取得的回應資料型態為str  ,

r.json()取得的回應資料型態為dict  ,

兩者有些許的不同,

要稍微留意一下





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月18日 星期五

青島大學OnlineJudge線上評測系統

OnlineJudge顧名思義,

是一個線上評測系統,

給誰使用的呢?

這是專為程式設計所做的驗證評測系統,

利用各式不同的題型,

驗證程式輸出輸入藉以判別學習者所建立的程式碼是否正確,

並根據設定給予分數

今天就以

青島大學OnlineJudge線上評測系統


作為範例做一個介紹


青島大學的OnlineJudge

主要有幾個特色:


  • Docker一鍵部署
  • 前後端分離
  • ACM/OI兩種模式
  • 多語言支持(C , Python, Java)


前端為Vue.js,

後端為Django,

程式碼開源,

附上官方網站

執行的畫面如下:

線上題型可自行設計


點進來可以看到問題的描述,

以及解題的一些提示,

右側顯示此題目的相關限制,

例如記憶體限制, 難度等等,

底下還有個正確率與錯誤率的圓餅圖,

只要有作答該圓餅圖就會即時更新


也可以點進狀態查詢各個提交答案的狀況,

官方網站將這些狀態的簡單說明也放在About /Judger中


 不囉嗦,

馬上新增一個題目,

輸入問題標題與描述之後,


接著設定程式記憶體限制,

以什麼程式語言做測試,

輸入輸出格式的範例,



接著選擇試題的類型ACM/OI,

當然還有最重要的輸出輸入範例檔,


如何建立正確的輸出輸入檔呢?

首先以記事本輸入輸入資料,

並命名為 1.in


接著到Python主控台打上

python 1.py > 1.out
這命令的意思是將1.py執行的結果存到1.out


接著將 1.out    ,   1.in 壓縮成zip,

利用testcase上傳按鈕,

傳到伺服器上



就能夠在線上

直接根據設定的語言進行解題

提交以後,

伺服器會根據testcase與設定的score進行給分




OnlineJudge   線上評測系統,

除了可用來批改程式作業以外,

也能以比賽的模式方式進行,

在限定的時間內完成解題

2018年12月1日 星期六

程式開發的版本控制- Git 安裝篇


程式開發過程中,

肯定製作了不少版本,

有些只用來除錯,

有些則是不同programmer修改的不同版本

甚至有些用來 release 正式版本,

至於如何對這些版本做管理與控制呢?

這就是今天的主題了:

程式開發的版本控制- Git 安裝篇


以windows 10   為範例做安裝教學,




下載完畢直接執行安裝程式 ,

第一步是一份版權宣告


 指定要安裝的位置


選擇要安裝的元件


在Windows程式集新增一個Git目錄


選擇要使用的編輯器


詢問要使用預設的命令列,

這裡使用windows預設cmd,



選擇SSL  lib for   https連線



這步驟是選擇是否自動轉換斷行符號

是由於windows與   linux在斷行符號上面的差異

Linux上面預設斷行符號通常以  \n   表示
windows上面預設為   \n\r 

當core.autocrlf為true時,

git會自動將斷行符號設為  \n

取用時,

自動轉回  \n\r
 


選擇喜好的終端機模擬器


其他選項



到此就安裝完畢




雖說安裝步驟很多,

其實最佳的設定還是以預設值為主,

程式開發的版本控制- Git 安裝篇,

其實到這裡就算是結束了,

敬請期待


程式開發的版本控制- Git 應用篇