五一小长假都有作业。
假中假可还行,还没开学就放假

第三题 绘制菱形

编写代码,输出由星号*组成的菱形图案,并且可以灵活控制图案的大小。


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)