COMP9021程式設計原理2024年第1學期課業1價值13馬克,第7周星期一上午10點到期
1.一般事項
1.1目標
本任務的目的是:
•培養解決問題的技能。
•以中型Python程式的形式設計和實現問題的解決方案。
•練習算術計算、測試、重複、列表和字串的使用。
•使用程式程式設計。
1.2標記
該課業價值13分,大致分佈如下:
“對不起,夥計,我沒有得到你想要的!”得1.50分
3.50分表示“嘿,問我一些並非不可能的事情!”
“請轉換”2.25分
2.50分表示“請使用轉換”
3.25分表示“請最低限度地轉換”
13.00分您的程式將針對多個輸入進行測試。對於每個測試,自動標記指令碼將允許程式執行30秒。您的程式的輸出應該與指示完全一致。
1.3截止日期和提交
您的程式將儲存在名為roman_arabic.py的檔案中。可以提交課業不止一次。截止日期和時間之前的最後一個版本將被標記(除非您提交較晚在這種情況下,將標記最後的最新版本)。課業1於2024年3月25日星期一上午10:00(悉尼時間)第7周到期請注意,自到期日起5天內,即任何2024年3月30日星期六上午10:00之後第7周的逾期提交將被丟棄。透過單擊[標記]提交時,確保不要更改檔名roman_arabic.py按鈕。您有責任檢查您的提交是否正確使用Ed中的提交連結,否則你的分數將為零。
1.4關於剽竊政策的提醒
你被允許,甚至被鼓勵,與其他人討論解決任務的方法。這樣的討論必須從演算法而非程式碼的角度進行。但您必須自己實施解決方案。當學生複製和修改他人的作品或在一個實施方案上密切合作。將受到嚴厲處罰。
2.說明
您將設計並實現一個程式,該程式提示使用者輸入以下內容:我能幫你什麼?使用者輸入應為三種可能型別之一:
請轉換***
請使用轉換******
請最低限度地轉換***
如果使用者輸入不是這種形式,則出現任意非空序列對於非空格符號,則程式應列印出:我沒有得到你想要的,對不起,夥計!然後停下來。
2.1第一種輸入
如果使用者輸入請轉換,則應為嚴格正可以轉換為羅馬數的整數(其表示不應以0開頭)(因此最多等於3999),或有效的羅馬數字;否則,程式應該列印輸出:
嘿,問我一些並非不可能的事情!然後停下來。如果輸入如預期,則程式應執行從阿拉伯語到羅馬字母或從羅馬字母到阿拉伯語,並以以下形式列印出結果:當然是的
2.2第二種輸入
如果使用者輸入請使用轉換,則第一個應為嚴格正整數(其表示不應以0開頭)或的序列(小寫或大寫)字母,第二個應該是一個不同的序列(小寫或大寫)字母。此外
•第二個旨在表示一系列所謂的廣義羅馬符號。與序列相對應的古典羅馬符號MDCXVI,其最右邊的元素表示1,第二右邊元件5、最右邊的第三個元件10等。
•如果不是整數,則第一個表示所謂的廣義羅馬數字,即可以解碼的通用羅馬符號序列使用所提供的通用羅馬符號序列,類似於羅馬符號表示數字。如果不是這樣,或者無法將第一個從阿拉伯語轉換為通用的羅馬字母或從通用羅馬字母到阿拉伯語,代 寫COMP9021則程式應列印出來:嘿,問我一些並非不可能的事情!
然後停下來。4.如果輸入如預期,並且可以執行轉換,那麼程式確實應該執行從阿拉伯語到通用羅馬語或從通用羅馬語到阿拉伯語的轉換,並列印出結果如下:的
2.3第三類輸入
如果使用者輸入請至少轉換,那麼應該是一個序列(小寫或大寫)字母。該程式將嘗試將視為一個通用的羅馬人關於某種通用羅馬符號序列的數字。如果這是不可能的,則程式應列印出:嘿,問我一些並非不可能的事情!然後停下來。否則程式應該找到可以從轉換的最小整數,被視為某種通用的羅馬數字,轉換為阿拉伯語,並輸出形式的資訊當然它正在使用5.
3.樣本輸出(或測試用例)
以下是一些測試以及預期輸出。程式的輸出應該準確如圖所示:
$python3 roman_arabic.py
我能幫你什麼?請完成我的任務。。。
我沒有得到你想要的,對不起,夥計!
$python3 roman_arabic.py
我能幫你什麼?請轉換35
我沒有得到你想要的,對不起,夥計!
$python3 roman_arabic.py
我能幫你什麼?請轉換035
嘿,問我一些並非不可能的事情!
$python3 roman_arabic.py
我能幫你什麼?請轉換4000
嘿,問我一些並非不可能的事情!
$python3 roman_arabic.py
我能幫你什麼?請轉換IIII
嘿,問我一些並非不可能的事情!
$python3 roman_arabic.py
我能幫你什麼?請轉換IXI
嘿,問我一些並非不可能的事情!
$python3 roman_arabic.py
我能幫你什麼?請轉換35
當然是XXXV
$python3 roman_arabic.py
我能幫你什麼?請轉換1982
當然是MCMLXXXII
$python3 roman_arabic.py
我能幫你什麼?請轉換3007
當然它是MMMVII
$python3 roman_arabic.py
我能幫你什麼?請轉換MCMLXXXII
當然現在是1982年
$python3 roman_arabic.py
我能幫你什麼?請轉換MMMVII
當然是3007
$python3 roman_arabic.py
我能幫你什麼?請使用ABC轉換123
我沒有得到你想要的,對不起,夥計!
$python3 roman_arabic.py
我能幫你什麼?請轉換123 ussing ABC
我沒有得到你想要的,對不起,夥計!
$python3 roman_arabic.py
我能幫你什麼?請使用VI轉換XXXVI
嘿,問我一些並非不可能的事情!
$python3 roman_arabic.py
我能幫你什麼?請使用IVX轉換XXXVI
嘿,問我一些並非不可能的事情!
$python3 roman_arabic.py
我能幫你什麼?請使用XWVI轉換XXXVI
嘿,問我一些並非不可能的事情!
$python3 roman_arabic.py
我能幫你什麼?請使用II轉換I
嘿,問我一些並非不可能的事情!
$python3 roman_arabic.py
我能幫你什麼?請轉換_使用_
嘿,問我一些並非不可能的事情!
$python3 roman_arabic.py
我能幫你什麼?請使用XVI轉換XXXVI
當然是36
$python3 roman_arabic.py
我能幫你什麼?請使用XABVI轉換XXXVI
當然是306
$python3 roman_arabic.py
我能幫你什麼?請使用fFeEdDcCbBaA轉換EeDEBBaA
當然是49036
$python3 roman_arabic.py
我能幫你什麼?請使用fFeEdDcCbBaA轉換49036
當然是EeDEBBAA
$python3 roman_arabic.py
我能幫你什麼?請使用轉換89999999999
AaBbCcDdEeFfGgHhIiJjKkLl
當然這是Aaaabacbdcedfegfhgihjikjlk
$python3 roman_arabic.py
我能幫你什麼?請使用轉換EFGHIJKLMNOPQRST
AbBcCdDeEfFgGhHiIjJkKlLmNoOpPqQrRstT
當然是1111111111111111
$python3 roman_arabic.py
我能幫你什麼?請使用LAQMPVXYZIRSGN轉換1900604
當然太棒了
$python3 roman_arabic.py
我能幫你什麼?請轉換最低限度使用E
我沒有得到你想要的,對不起,夥計!
$python3 roman_arabic.py
我能幫你什麼?請轉換bao dong minimally
我沒有得到你想要的,對不起,夥計!
$python3 roman_arabic.py
我能幫你什麼?請最低限度地轉換0I
嘿,問我一些並非不可能的事情!
$python3 roman_arabic.py
我能幫你什麼?請最低限度地轉換ABAA
嘿,問我一些並非不可能的事情!
10
$python3 roman_arabic.py
我能幫你什麼?請最低限度地轉換ABCD EFA
嘿,問我一些並非不可能的事情!
$python3 roman_arabic.py
我能幫你什麼?請最低限度地轉換MDCCL3XXXVII
當然它是1787年使用MDCXVI
$python3 roman_arabic.py
我能幫你什麼?請最低限度地轉換MDCCLXXXXIX
當然使用MDCLX_I是1789
$python3 roman_arabic.py
我能幫你什麼?請最低限度地轉換MMMVII
當然使用MVI是37
$python3 roman_arabic.py
我能幫你什麼?請最低限度地轉換VI
當然使用IV是4
$python3 roman_arabic.py
我能幫你什麼?請最低限度地轉換ABCADDEFGF
當然使用BA_C_DEF_G為49269
$python3 roman_arabic.py
我能幫你什麼?請最低限度地轉換ABCCDED
當然使用ABC_D_E是1719
4.提示
4.1解釋以下第三種輸入的示例(請至少轉換):
$python3 roman_arabic.py我能幫你什麼?請最低限度地轉換ABCADDEFGF當然使用BA_C_DEF_G為49269
首先,記住以下兩條重要的羅馬數字規則:1.一個羅馬符號重複三次,但不超過三次。然而符號V(5),L(50)和D(500)從不重複。2.羅馬符號V(5)、L(50)和D(500)從不寫在符號的左邊彼此相鄰),我們不能將A賦值為500(500不能從中減去數字假設我們給A賦值1000,那麼B可以是5000或10000。B不能是5000,因為意味著C只能是500。此外,B不能是10000,因為這意味著C應該是5000或500(兩者都是無效分配)。讓我們嘗試將10000分配給A(因為它是重複的,所以不能分配5000)。B可以是任意一個50000或100000。如果B是50000,則C可以是5000、1000或500。C不能是5000或500(因為它們是從任何數字中減去的)。C可以是1000。因此,我們在這裡能得出的最小值是A為10000,B為50000,以及1000對於C,ABCA=50000-10000+10000-1000=49000。因此,使用BA_C_DEF_G(未分配值5、500和5000),總數變為49269。
4.2關於第三種輸入的更多示例(請至少轉換):
$python3 roman_arabic.py
我能幫你什麼?請最低限度地轉換AZERTY當然使用ZAREYT是444
$python3 roman_arabic.py
我能幫你什麼?請最低限度地轉換XXXVVVIII
當然使用X_V_I是333
$python3 roman_arabic.py
我能幫你什麼?請最低限度地轉換AhZhJ
當然使用Ah_Z_J為691
$python3 roman_arabic.py
我能幫你什麼?請最低限度地轉換BCBC
嘿,問我一些並非不可能的事情!