2019年6月11日 星期二

APCS 前置作業- zerojudge 基礎題庫 by python



zerojudge 為高師附中江其勳老師開發的程式寫作 Online Judge 網站:
https://zerojudge.tw/

進入網站後到 分類題庫>基礎題庫 有一些基礎練習連結如下:
https://zerojudge.tw/Problems?tabid=BASIC#tab00


今天要幫大家介紹如何搭配 python 做幾個基礎的練習:

話說python本身在做標準輸入時不像 c++ 一樣可以直接偵測EOF

例如:
  1. int n;
  2. while(scanf("%d",&n) != EOF)
  3.  
  4. {
  5.  
  6. //...主程式...
  7.  
  8. }

上例c++程式中會不斷讀入整數給變數n直到讀到EOF為止

為了讓 python程式可以在 zerojude上順利執行,我們導入了 try....except的概念
(try的用法可參考:http://www.runoob.com/python/python-exceptions.html)

讓讀到 EOF 當作例外來觸發,觸發之後可視程式的需求進一步動作,或終止程式。

例外處理與程式除錯是另外一門藝術,讀者可以藉由下列實例體會在程式中使用try來跳過例外狀況的方便之處,並慢慢學習真正需要做程式除錯時,程式中如何妥善傳遞例外狀況。


題目1. a001: 哈囉
https://zerojudge.tw/ShowProblem?problemid=a001
  1. while True:
  2. try:a=input()
  3. except:break #過濾掉 EOFError,讀到EOF後直接跳出迴圈
  4. if not a:break #輸入空字串時跳出迴圈
  5. print('hello,',a)

題目2. a002: 簡易加法
https://zerojudge.tw/ShowProblem?problemid=a002
  1. while True:
  2. try:
  3. #用字串內建的 split() 函式
  4. #將字串做分割並將結果回傳給 a,b
  5. a,b=input().split()
  6. except: break
  7. if not a:break
  8. print(int(a)+int(b))

題目3. a003: 兩光法師占卜術
https://zerojudge.tw/ShowProblem?problemid=a003
  1. R=['普通','吉','大吉']
  2. while True:
  3. try:
  4. M,D=input().split()
  5. except: break
  6. S=(int(M)*2+int(D))%3
  7. print(R[S])

題目4. a004: 文文的求婚
https://zerojudge.tw/ShowProblem?problemid=a004
  1. #西元年被4整除且不被100整除,或被400整除者即為閏年
  2. while True:
  3. try:
  4. Y=int(input())
  5. except: break
  6. if (Y%4==0 and Y%100!=0)or Y%400==0 :
  7. print('閏年')
  8. else :
  9. print('平年')

題目5. a005: Eva 的回家作業
https://zerojudge.tw/ShowProblem?problemid=a005
  1. n=int(input())
  2. for i in range(n):
  3. L=input().split()
  4. #A=[int(L[0]),int(L[1]),int(L[2]),int(L[3])]
  5. A= list(map(int,L))#一個將 L 串列中的元素取int的簡潔方法
  6. if A[1]-A[0] == A[2]-A[1] : #等差
  7. A.append(A[3]+A[2]-A[1])
  8. else: #等比
  9. A.append(A[3]*int(A[2]/A[1]))
  10. #把 A 串列中的元素塞到空字串R裡面,並用空白字元隔開
  11. R=""
  12. for a in A:
  13. r=str(a) #別忘了 A中的元素已被轉換成int了,要做字串運算的話要再轉換回來
  14. R=R+r+" "
  15. print(R.strip())#用字串內建strip函式將頭尾多餘的空白字元刪除

以上五題供大家參考,初學者有空可繼續把全部基本題都做完