☆解題須知☆
本題是「駭客題」,與一般的競賽解題不同,
解題者不必根據題目撰寫解題的程式碼,
題目本身會提供一個存在問題的程式碼,
解題者的目標是構造出一個合理的輸入,
使得該程式執行後會導致錯誤(WA 或 RE 等等)。
Carol 和 Dave 是已經學習
Python 好一陣子的學生,兩人的程度相較一般的學生來得更高,兩人為了展現自身實力,常常在 Snail 老師所出的作業中使用一些 Snail 老師上課沒有教的技術和技巧,好比 Snail 老師先前出的作業「
判斷數字」亦是如此。
該作業要求學生實作一個函數 isNumber(s)
,其輸入參數 s
為一個字串(str
),該函數需要回傳一個布林值(bool
)用以判斷字串 s
是否為「數字」?若一個字串至少包含一個字元,且之中的每個字元皆為阿拉伯數字 0123456789
其中之一,則我們稱該字串為「數字」。
對於這種初學者級別的題目,Carol 和 Dave 自然是迅速完成作業,並同時展現他們的獨特風格,以下是他們答案:
Carol 的答案:
import re
def isNumber(s: str) -> bool:
return re.match(r'^\d+$', s, re.A) is not None
Dave 的答案:
from string import digits
def isNumber(s: str) -> bool:
return bool(s) and all(c in digits for c in s)
Snail 老師出作業給學生們練習的目的在於讓學生能夠更加熟悉 Python 的基本使用方法,所以 Snail 老師其實並不是很喜歡兩人這種使用上課尚未教到的方式來完成作業,但因為兩人基本上都能迅速且正確無誤地完成作業,所以 Snail 老師對此也無法多說些什麼。
然而這次就不太一樣了,Snail 老師看了看兩人的程式碼,隨即表示其中一人的程式碼並不正確,並表示雖然 Python 有著很多套件,可以幫助開發者完成許多事情十分方便,但若在不熟悉的情況下使用就有可能使用不當,寫出有 bug 的程式碼而不自知,說完話的同時剛好 Alice 和 Bob 也來找 Snail 老師檢查作業,於是 Snail 老師就離開了。
由於 Snail 老師並沒有說誰的答案有誤,Carol 和 Dave 都互相指責對方才是錯誤的那一方,兩人吵得不可開交,此時非常倒楣的你恰好就在他們旁邊,你隨即被請來幫助他們。首先,你需要先判斷究竟誰才是正確的那一方,接著為了方便說明,你還需要準備一個字串,該字串作為輸入參數時,對於兩人所撰寫的函數會有不同的回傳值。
不知為何,你總覺得等等還會遇到類似的事情,所以你想要盡快完成這邊的事情,你能夠順利解決 Carol 和 Dave 的爭吵嗎?