python作业

求大佬指教

第1个回答  2019-04-17
# Python3.6
# 导入random模块
import random

# 定义一个人椅的类
class ManAndBench:
    def __init__(self, n_bench):
        self.bench_num = n_bench
        # 依次已经被占用的座位号
        self.break_point = []

    def print_bench(self):
        # 定义全0数组作为长椅
        pt_str = [0 for _ in range(self.bench_num)]
        # 按照占用的作为号,重写长椅数字
        for i, item in enumerate(self.break_point):
            # 长椅的第[作为号]赋值为第i+1个人
            pt_str[item] = i+1

        brk_num = len(self.break_point)
        if brk_num == 0:
            print("长椅为空:", pt_str)
        else:
            print("{:2d}号男人: {}".format(brk_num, pt_str))

    def next_man(self):
        # 如果是第一个人,使用随机占座
        if len(self.break_point) == 0:
            fst = random.randint(0, self.bench_num - 1)
            self.break_point.append(fst)
        else:
            brk_num = len(self.break_point)
            # 产生已经被占座的个数+1的全零数组,用于空的位置长度计数
            block_size = [0 for _ in range(brk_num + 1)]

            # 统计每个空位置的长度
            tmp = 0
            for i in range(self.bench_num):
                # 如果第i个作为没有被占用,则第tmp个数组加1
                if i not in self.break_point:
                    block_size[tmp] += 1
                # 否则,tmp加1,统计下一个间隔段的长度
                else:
                    tmp += 1

            # 找出最大长度,计算最大长度块的序号
            max_block = max(block_size)
            max_index = block_size.index(max_block)

            # 计算最大长度块在整个长椅中的分割点
            start = 0
            for i in range(max_index):
                start += block_size[i]+1
            self.break_point.append(start + max_block // 2)
 
            
c = int(input("请输入椅子的数量:"))
while True:
    m = int(input("请输入人的数量:"))
    if m <= c:
        break
    else:
        print("人数量大于椅子数量,请重新输入!")

# 引用定义的类
mab = ManAndBench(c)
# 打印长椅
mab.print_bench()
# 每次坐一个人,打印一次
for _ in range(m):
    mab.next_man()
    mab.print_bench()

本回答被提问者采纳
相似回答