Python抽取学号输出且免重复超过两次

实在是想不出来了,求帮看一眼,给一点思路。
python题,输入班级人数n,每轮随机抽取x位,前两轮被连续抽到的学生第三次不被抽到(但是之后第四第五轮可以),抽五轮,输出每轮抽到的学生学号

设置一个标志位 flag
flag = 0
第一次比如说抽到 1 令flag 为1
第二次 还是1 令flag =-1; 不为1 :flag= 0
第三次 为1 且 flag = -1 再抽一次; 为1 且flag != -1 ,输出

import random


def main(param: dict):

    n = param["班级人数"]
    # n = 100  # 班级人数

    times = param["抽奖次数"]
    # times = 5  # 抽奖次数

    x = param["每一轮抽到的数量"]
    # x = 20  # 所有抽奖轮都抽取20个
    # # x = [20, 20, 10, 30, 40]  # 不同抽奖轮抽取不同数量, 长度需要和上面times一致!

    if type(x) is int:
        xx = [x] * times
    else:
        xx = x
    d = dict()
    for time in range(1, times+1):  # 共times轮抽奖
        isStudentId = []  # 收集当前抽奖轮被抽中的学生学号
        for i in range(100000):  # 开始抽奖, 迭代直到人数足够, 进入下一轮
            Id = random.randint(1, n+1)  # 从学号1-100中随机抽取一个
            if Id not in isStudentId:  # 如果该学号没有被抽取过
                if len(isStudentId) < xx[time-1]:  # 该轮抽奖未抽够x位学生
                    if Id not in d:  # 如果字典中没有记录有该名学生的信息
                        isStudentId.append(Id)  # 收集当前抽奖轮被抽中的学生学号
                        d[Id] = [time]  # key=学号, value=[第几轮抽奖]
                    else:  # 如果字典中有记录有该名学生的信息
                        if len(d[Id]) > 1:  # 如果信息记录数量大于1次
                            if d[Id][-1] - d[Id][-2] != 1:  # 判断信息记录中最后两次是否为连续抽到, 如果不是连续抽到, 执行下面的代码
                                isStudentId.append(Id)  # 收集当前抽奖轮被抽中的学生学号
                                d[Id].append(time)  # 将信息记录在字典中
                        else:
                            isStudentId.append(Id)  # 收集当前抽奖轮被抽中的学生学号
                            d[Id].append(time)  # 将信息记录在字典中
            if len(isStudentId) == xx[time-1]:
                break

    for k, v in d.items():
        print("抽中学号->", k, "被抽中的轮:", v)

    cc = []
    for i in range(1, 6):
        c = []
        for k, v in d.items():
            if i in v:
                c.append(k)
        cc.append(c)
    for time, i in enumerate(cc):
        print("第" + str(time+1) + "次抽奖结果:", i)

    return d, cc  # d: dict-> 被抽出学生分布情况, cc: list -> 每轮抽奖情况


if __name__ == '__main__':
    api_param = {
        "班级人数": 50,  # 班级人数n
        "抽奖次数": 5,  # 抽奖轮数
        "每一轮抽到的数量": 10,  # 随机抽取数量x, 这个数量尽量不要太接近班级人数, 否则不连续抽中3次这个条件冲突导致抽不到人
        # "每一轮抽到的数量": [20, 20, 10, 30, 40],  # 不同抽奖轮抽取不同数量, 列表长度需要和上面times一致! | 这个数量尽量不要太接近班级人数, 否则不连续抽中3次这个条件冲突导致抽不到人
    }
    main(api_param)

...
抽中学号-> 16 被抽中的轮: [5]
抽中学号-> 24 被抽中的轮: [5]
抽中学号-> 43 被抽中的轮: [5]
第1次抽奖结果: [38, 37, 14, 40, 49, 12, 15, 46, 17, 23]
第2次抽奖结果: [38, 29, 4, 45, 25, 9, 21, 41, 1, 18]
第3次抽奖结果: [12, 17, 29, 25, 33, 8, 35, 31, 32, 10]
第4次抽奖结果: [40, 46, 23, 21, 35, 20, 50, 51, 13, 27]
第5次抽奖结果: [45, 21, 10, 51, 30, 5, 42, 16, 24, 43]