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

2019年11月22日 星期五

OnlineJudge線上評測系統-常見問題


之前介紹過OnlineJudge線上評測系統,

也列了一個程式範例,

一套新的系統對使用者來說肯定很陌生,

因此也產生了一些問題,

今天就針對這些問題來介紹:

OnlineJudge線上評測系統-常見問題


輸入/輸出範例相關




每個試題都有輸入範例與輸出範例,

而 OJ 是以比對方式來判別程式是否正確,

輸入/輸出範例中未出現的字(包含空格、逗號、換行)都會造成錯誤

上圖中的程式在輸出的時候多出了 “ a + b = “。


輸入/輸出範例相關



上圖中的程式多了輸入提示 '直徑?' ,

輸出也多了 ’面積為’ 、 '周長為' ,

故判定錯誤。


載入模組未加上 import


上圖中的程式使用了 math 模組,但沒有加上 import

資料型態


左圖中的程式假設輸入 a=1 , b=2 ,

雖然有作資料型態的轉換,

但因為輸出的浮點數 3.0 與題目的輸出範例不符,

故判定結果為錯誤。

演示範例:




input得到的資料,其型態為字串



input所得到的資料為字串,

必須先轉變資料型態後,

才能拿來作數值的運算。

以上圖中程式為範例,

分別輸入 1 與 2 ,

最終得到的結果為’ 12 ’ 的字串而非兩數字相加。



而此圖中程式並未作資料型態的轉換,

就直接作相減的運算,

故判定結果為錯誤。

split為字串分割的方法


上圖範例 b = a.split(‘,’),

可看到split回傳值為一個List(如黃底所示),

將原來的字串 a 分割為 ‘hello’ 與 ‘world’ 兩個字串。

程式演示:




上圖程式則是先將字串轉換為浮點數,

導致 c 與 b 已經不是字串,

再使用 split 是錯誤的。


初學者學習程式同時還要適應OnlineJudge線上評測系統,

難免會出現許多基本問題,

只要多練習即可。




2019年9月10日 星期二

OnlineJudge線上評測系統-兩數相加範例


之前介紹過OnlineJudge線上評測系統,

坐而言不如起而行,

寫程式就是要實作才印象深刻,

今天就帶大家體驗下:

OnlineJudge線上評測系統-兩數相加範例

既然要線上解題,

看懂題目就是第一步,

此範例要求使用者以input輸入兩個數字,

並輸出兩數相加的值。


很簡單的題目,

但也是很基礎的觀念題,


就從最常見的錯誤開始解析:

Python跟C不同,

使用變數不需要事先宣告,

但變數的資料型態取決於第一次使用所賦予的值,

input()所取得的變數必然為字串,

以題目中提到的輸入範例1,

輸入值為1跟2,

此錯誤答案輸出的結果為 12,

與舉例的解答有出入,

故系統判別為錯誤答案(Wrong Answer)。


而Runtime Error,

則是因為題目沒看清楚阿,

範例明明直接取得變數,

不需要另外加上中文。


由於input取得的變數為字串(string),

故必須透過資料型態的轉換,

將取得的變數轉為整數(int)之後,

才能拿來做四則運算。


從這個簡單的題目能學到哪些東西?

1. print用法
2. input用法
3. 資料型態的轉換
4. 變數的加法運算


程式就是要多練習,

才會進步得快,

這就是今天的兩數相加範例







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   線上評測系統,

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

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

在限定的時間內完成解題