小组成员:
姓名 | 学号 |
张伯威 | 2018141461065 |
罗正 | 2018141461092 |
分组编写黄金点程序:
设计要求:
- N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。
- 采用单机方式实现,提供便利输入界面。
- 至少可以运行十轮以上,保留各轮比赛结果
- 后续基础上迭代开发
设计思路:
- 通过对资料的了解得知,黄金点游戏有一个特性。与聪明人玩游戏,黄金点在逐渐地往下移动。一次游戏的获胜数字和大家的聪明程度有关,越聪明,第一轮的数字就越低。由此可知,如果设计AI,需要设计其输入数字迭代次数。
- 本次设计是人人交互,通过用户输入数字,所以采取命令行方式
- 运行十轮,保留用户得分信息
环境选择:
通过对任务需求和开发难度的综合考量,选择用python来编写代码。
设计代码(第一版):
pointList = []
players = 10
for i in range(players):
pointList.append(0)
times = 0
while times < 10:
numberList = []
average = 0
closestNumber = 0
fartherNumber = 0
closestSub = 100
fartherSub = 0
for i in range(10):
inputNum = input("输入数字:")
numberList.append(inputNum)
average = average + float(inputNum)
average = average / 10 * 0.618
for i in range(len(numberList)):
playerSub = abs(float(numberList[i]) - average)
if i == 0:
closestSub = fartherSub = playerSub
closestNumber = fartherNumber = 0
else:
if playerSub < closestSub:
closestNumber = i
if playerSub > fartherSub:
fartherNumber = i
print("Win:", closestNumber, "Lose:", fartherNumber)
pointList[closestNumber] = pointList[closestNumber] + 10
pointList[fartherNumber] = pointList[fartherNumber] - 2
times = times + 1
第一版代码实现了基本的玩法功能和输赢后的加分减分方式,但是最后成绩还没有输出,
输入输出方式是命令行,需要由玩家输入数字
之后会对代码进行优化