k886. Python駭客題-判斷數字2
標籤 : Python 字串 正規表達式 駭客題
通過比率 : 2人/4人 ( 50% ) [非即時]
評分方式:
Special

最近更新 : 2023-06-18 01:06

內容
☆解題須知☆
本題是「駭客題」,與一般的競賽解題不同,
解題者不必根據題目撰寫解題的程式碼,
題目本身會提供一個存在問題的程式碼,
解題者的目標是構造出一個合理的輸入,
使得該程式執行後會導致錯誤(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 的爭吵嗎?
輸入說明
本題沒有輸入。
輸出說明
輸出包含兩個部分,其中輸出的第一行為第一部分,剩餘的輸出屬於第二部分。
第一部分需輸出 Carol 或是 Dave,代表誰的程式碼是正確的。
第二部分的輸出將會被視為一個 Python 的字串,該字串長度不應超過 $100$,且當該字串作為輸入參數時,必須使得兩人所撰寫的函數有不同的回傳值。
!!請注意!!
  • 本題為「自訂比對」,
    故無法使用「測試執行」進行測試。
  • 本題的「範例輸出」僅作為輸出格式參考範本,
    除了格式之外其內容不具任何意義,
    直接輸出並無法 AC 本題。
  • 若輸出結尾存在換行或其他空白字元,
    皆會被視作字串的一部分,
    還請特別注意。
  • 若欲使第二部分的字串為空字串,
    僅輸出第一部分即可。
  • 關於本題的換行,
    以第一個 \n(U+000A) 單一字元作為輸出中第一部分與第二部分的分隔。
範例輸入 #1


											
										
範例輸出 #1
Carol
1234567890
測資資訊:
記憶體限制: 64 MB
公開 測資點#0 (100%): 1.0s , <1K
提示 :
評測說明🔍
下列情況皆會被視作答案錯誤(WA):
  • 輸出檔案過大
  • 沒有任何輸出
  • 輸出無法以 UTF-8 編碼轉換成 Python 字串型態
  • 第一部分並非輸出 Carol 或是 Dave
  • 第一部分回答錯誤
  • 第二部分轉換成 Python 字串型態後其長度超過 $100$
  • 第二部分的字串無法使得兩者函數有不同的回傳值
另外,為了增加難度,
以及避免解題者從錯誤訊息中反推正確答案,
答案錯誤將會統一顯示 WA (line:1)
並且不會提供詳細的錯誤訊息。
題目更新日誌📝
2023/06/18
  • 公開題目
出題者的話💬
各位好,我是本題的出題者,
本題的出題想法源自上一題
主要是自己在撰寫 Special Judge 時自身採到的雷,
沒錯,又踩一個雷... ... Orz (我怎麼說又呢?
所以說 Python 怎麼老是跟我想像中運作的不太一樣啊?
總之如此這般就又再度出了一題了。
本題跟上一題相同,
單純猜測可能的答案就有機會 AC
如果是這種情況而 AC 的各位,
希望你能夠去探究造成該結果背後的原因,
錯誤一方的函數究竟錯在哪?
為什麼該輸入會導致錯誤的回傳值?
如此一來本題對你來說才具有價值,
若只是想提高 AC 數並無法讓你學到任何東西。
原本是只想出一題「駭客題」的,
結果就這樣出了三題我也是沒想到呢,
最近難得有出題的想法可能還會繼續出題,
只不過近期應該是不會再出「駭客題」了,
至於是什麼題目還請各位敬請期待。
另外,作為出題者在此有個小小的請求,
對於順利 AC 本題的各位,
請不要於 解題報告 中直接給出答案或撰寫無關的內容,
如果能願意配合我會很感謝你的。
若對於題目有任何問題,
歡迎使用 本題討論 或站內信告知我,
如果我有看到將會盡速處理。
標籤:
Python 字串 正規表達式 駭客題
出處:
[管理者: lw310659 (面臨首次失敗又當不成『 』的我...) ]

本題狀況 本題討論 排行

編號 身分 題目 主題 人氣 發表日期
沒有發現任何「解題報告」