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
嘿,问我一些并非不可能的事情!