'python尼姆游戏'
五一小长假都有作业。
假中假可还行,还没开学就放假
第三题 绘制菱形
编写代码,输出由星号*组成的菱形图案,并且可以灵活控制图案的大小。
n = 6 # 菱形得到大小
for i in range(n):
print((' * ' * i).center(n * 3))
for i in range(n, 0, -1):
print((' * ' * i).center(n * 3))
第四题 组合计算
# encoding: utf-8
"""
@author: Eden
@contact: .....
@time: 2020/5/2 12:11
@file: problem_04.py
@desc:
4.编写程序,计算组合数C(n,i),即从n个元素中任选i个,有多少种选法。
"""
import math
n, m = 6, 2
print(math.factorial(n) // (math.factorial(m) * math.factorial(n - m)))
第五题 比赛成绩
模拟决赛现场最终成绩的计算过程。
有至少3个评委,
打分规则为删除最高分和最低分之后计算剩余分数的平均分。
# 评分
while True:
scores = input("请录入分数,以空格间隔分数: ").split()
scores = list(map(float, scores))
if len(scores) < 3:
print("评委人数小于3人,请重新录入分数")
else:
break
score_max = max(scores)
score_min = min(scores)
print("去掉一个最高分 %0.2f" % score_max)
print("去掉一个最低分 %0.2f" % score_min)
scores.remove(score_max)
scores.remove(score_min)
scores_sum = sum(scores)
final_score = scores_sum / len(scores)
print("最后得分 %0.2f" % final_score)
第六题 尼姆游戏
只有一堆棋子
每次从尼姆堆中拿走的棋子数量不能超过尼姆堆中棋子数量的一半
但至少取走一个
最后不能再取的就是输家。
(待补充尼姆游戏必胜算法)
可以先参考此文章👉👉👉点击阅读
# encoding: utf-8
from random import randint
from math import floor, log2
def answer_n(x):
return floor(log2(x / 3))
def smart(n):
if n <= 3:
return 1
if log2((n + 1) / 3) % 1 == 0:
# 处于必输状态,随机数量
return randint(1, n // 2)
else:
# 按玩家必输模式计算出机器人应拿走的数量
return n - (3 * 2 ** answer_n(n) - 1)
def re_input():
while True:
try:
nums = int(input("该你了,你要拿走:"))
return nums
except ValueError:
print("请输入一个数字!!!")
def nim_game(n):
while True:
print("现在共有" + str(n) + "个棋子")
nim = smart(n)
print("Eden拿走了" + str(nim) + "个")
n -= nim
print("现在共有" + str(n) + "个棋子")
if n == 0:
print("你输了!")
return
you = re_input()
while True:
if 1 <= you <= n / 2 or n == 1:
print("你拿走了" + str(you) + "个")
break
if you < 1:
print("至少要拿走一个棋子!")
else:
print("最多只能拿走一半的棋子!")
you = re_input()
n -= you
if n == 0:
print("现在共有" + str(n) + "个棋子")
print("你赢了!")
return
if __name__ == '__main__':
num = int(input("请输入棋子的总数: "))
nim_game(num)
评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果