一、实验目的
(1)掌握结构化程序设计方法
(2)掌握Python的模块组织方法
二、实验环境
Windows 7以上版本的操作系统,Python 3.5以上编程环境。
三、实验内容和步骤
1.阅读下列代码,运行竞技比赛模拟程序,查看执行结果。
#MatchAnalysis.py
from random import random
def printIntro():
print("这个程序模拟两个选手A和B的某种竞技比赛")
print("程序运行需要A和B的能力值(以0到1之间的小数表示)")
def getInputs():
a = eval(input("请输入选手A的能力值(0-1): "))
b = eval(input("请输入选手B的能力值(0-1): "))
n = eval(input("模拟比赛的场次: "))
return a, b, n
def simNGames(n, probA, probB):
winsA, winsB = 0, 0
for i in range(n):
scoreA, scoreB = simOneGame(probA, probB)
if scoreA > scoreB:
winsA += 1
else:
winsB += 1
return winsA, winsB
def gameOver(a,b):
return a==15 or b==15
def simOneGame(probA, probB):
scoreA, scoreB = 0, 0
serving = "A"
while not gameOver(scoreA, scoreB):
if serving == "A":
if random() < probA:
scoreA += 1
else:
serving="B"
else:
if random() < probB:
scoreB += 1
else:
serving="A"
return scoreA, scoreB
def printSummary(winsA, winsB):
n = winsA + winsB
print("竞技分析开始,共模拟{}场比赛".format(n))
print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA/n))
print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB/n))
def main():
printIntro()
probA, probB, n = getInputs()
winsA, winsB = simNGames(n, probA, probB)
printSummary(winsA, winsB)
main()
2.阅读官方文档关于package的描述:
https://docs.python.org/zh-cn/3/tutorial/modules.html#packages
module和package特性是Python开发大型项目的基石,请仔细阅读上述官方文档。回答:init.py文件的作用是什么?
3.罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
| 字符 | 数值 |
|---|---|
| I | 1 |
| V | 5 |
| X | 10 |
| L | 50 |
| C | 100 |
| D | 500 |
| M | 100 |
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
编写Python程序:给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。
| 样例输入 | 样例输出 |
|---|---|
| 3 | III |
| 4 | IV |
| 9 | IX |
| 58 | LVIII (解释: L = 50, V = 5, III = 3) |
| 1994 | MCMXCIV (解释: M = 1000, CM = 900, XC = 90, IV = 4) |
四、实验结果
1. 运行截图

2. 回答
由于Python只把含 init.py 文件的目录当成包。因此__init__.py文件可以使Python能够将__init__.py所在的目录识别为一个包,除此之外,init.py还可以用来执行包的初始化代码,或设置__all__变量。
3.1 程序代码
thousands = ["", "M", "MM", "MMM"]
hundreds = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"]
tens = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"]
singles = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X"]
def getRomenNum(num, digit):
if digit == 4:
return thousands[num]
elif digit == 3:
return hundreds[num]
elif digit == 2:
return tens[num]
elif digit == 1:
return singles[num]
def main():
num = eval(input("请输入一个数字: "))
thousand = getRomenNum(num//1000, 4)
hundred = getRomenNum((num%1000)//100, 3)
ten = getRomenNum(((num%1000)%100)//10, 2)
single = getRomenNum(((num%1000)%100)%10, 1)
print(thousand + hundred + ten + single)
main()
3.2 运行截图

版权声明:本文为qq_43640281原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。