• 游客统计问题


    # 派对从中午十二点到晚上八点,客人到来和离开会签到,请统计哪个小时段内在场客人最多
    # 每半小时分为一个区间,统计哪个时间短的客人最多

      1 import random, datetime
      2 
      3 
      4 def product_guest():
      5     '''
      6     num_guest: 随机产生顾客是数量
      7     :return: 随机产生顾客是数量
      8     '''
      9     num_guest = random.randint(0, 100)
     10     return num_guest
     11 
     12 
     13 def product_time(start_time, end_time, num_guest):
     14     start_time_args_list = start_time.split(':')
     15     end_time_args_list = end_time.split(':')
     16     num_guest = num_guest
     17 
     18     come_hours_list = []
     19     leave_hours_list = []
     20 
     21     for i in range(num_guest):
     22         come_hours = random.randint(int(start_time_args_list[0]), int(end_time_args_list[0]) - 1)
     23         come_hours_list.append(str(come_hours))
     24         leave_hours_list.append(str(random.randint(come_hours, int(end_time_args_list[0]) - 1)))
     25 
     26     come_min_list = []
     27     leave_min_list = []
     28 
     29     for i in range(num_guest):
     30         come_min = random.randint(0, 59)
     31         if come_min < 10:
     32             come_min_list.append('0' + str(come_min))
     33         else:
     34             come_min_list.append(str(come_min))
     35 
     36         leave_min = random.randint(come_min, 59)
     37         if leave_min < 10:
     38             leave_min_list.append('0' + str(random.randint(come_min, 59)))
     39         else:
     40             leave_min_list.append(str(random.randint(come_min, 59)))
     41 
     42     come_sec_list = []
     43     leave_sec_list = []
     44 
     45     for i in range(num_guest):
     46         come_sec = random.randint(0, 59)
     47         if come_sec < 10:
     48             come_sec_list.append('0' + str(come_sec))
     49         else:
     50             come_sec_list.append(str(come_sec))
     51 
     52         if come_hours_list[i] == leave_hours_list[i] and come_min_list[i] == leave_min_list[i]:
     53             leave_sec = random.randint(come_sec, 59)
     54         else:
     55             leave_sec = random.randint(0, 59)
     56 
     57         if leave_sec < 10:
     58             leave_sec_list.append('0' + str(leave_sec))
     59         else:
     60             leave_sec_list.append(str(leave_sec))
     61 
     62     time_list = [[come_hours_list, leave_hours_list], [come_min_list, leave_min_list], [come_sec_list, leave_sec_list]]
     63     return time_list
     64 
     65 
     66 def guest_time(time_list, num_guest):
     67     guest_message_dict = {}
     68     for i in range(num_guest):
     69         guest_message_dict[f'客人{i}'] = {
     70             'come_time': ':'.join((time_list[0][0][i], time_list[1][0][i], time_list[2][0][i])),
     71             'leave_time': ':'.join((time_list[0][1][i], time_list[0][1][i], time_list[2][1][i]))}
     72     return guest_message_dict
     73 
     74 
     75 def max_guest_time(guest_message_dict, start_time, end_time):
     76     start_q = int(start_time.strip(':')[0])
     77     time_q_dict = {0: '12:00:00', 1: '12:30:00', 2: '13:00:00', 3: '13:30:00', 4: '14:00:00', 5: '14:30:00',
     78                    6: '15:00:00', 7: '15:30:00', 8: '16:00:00', 9: '16:30:00', 10: '17:00:00', 11: '17:30:00'}
     79 
     80     dict_time_num = {}
     81     for i in range((int(end_time.split(':')[0]) - int(start_time.split(':')[0])) * 2):
     82         dict_time_num[i] = 0
     83 
     84     guest_name = list(guest_message_dict.keys())
     85     for i in guest_name:
     86         guest_come_hour_min = guest_message_dict[i]['come_time'].split(':')
     87         guest_leave_hour_min = guest_message_dict[i]['leave_time'].split(':')
     88         if int(guest_come_hour_min[1]) < 30:
     89             time_num_come = (int(guest_come_hour_min[0]) - 12) * 2
     90         else:
     91             time_num_come = (int(guest_come_hour_min[0]) - 12) * 2 + 1
     92 
     93         if int(guest_come_hour_min[1]) < 30:
     94             time_num_leave = (int(guest_leave_hour_min[0]) - 12) * 2
     95         else:
     96             time_num_leave = (int(guest_leave_hour_min[0]) - 12) * 2 + 1
     97 
     98         for i in range(time_num_come, time_num_leave + 1):
     99             dict_time_num[i] += 1
    100 
    101     max_num = max(list(dict_time_num.values()))
    102 
    103     result = {}
    104 
    105     for i in dict_time_num.keys():
    106         if dict_time_num[i] == max_num:
    107             result[i] = {'时间': time_q_dict[i], 'count': dict_time_num[i]}
    108 
    109     return result
    110 
    111 
    112 if __name__ == '__main__':
    113     start_time = '12:00:00'
    114     end_time = '18:00:00'
    115 
    116     num_guest = product_guest()
    117     time_list = product_time(start_time, end_time, num_guest)
    118 
    119     guest_message_dict = guest_time(time_list, num_guest)
    120 
    121     print(max_guest_time(guest_message_dict, start_time, end_time))
  • 相关阅读:
    STM32 Cube之旅-尝试新的开发方式
    FOC 电流采样为什么不准?你忽略了这个细节
    STM32 外部中断详解(原理+配置代码)
    STM32 TIM高级定时器死区时间的计算
    【STM32系列汇总】小白博主的STM32实战快速进阶之路(持续更新)
    FOC 算法基础之欧拉公式
    一阶RC高通滤波器详解(仿真+matlab+C语言实现)
    一阶RC低通滤波器详解(仿真+matlab+C语言实现)
    matlab 调用C程序进行simulink仿真
    matlab 提示 Error using mex No supported compiler or SDK was found 错误的解决办法
  • 原文地址:https://www.cnblogs.com/ZN-225/p/13815132.html
Copyright © 2020-2023  润新知