求编写输入储物柜编号返回对应楼层的函数的最优代码
解决储物柜对应楼层的函数实现
首先明确楼层与储物柜的规律:
- 每3层为一个循环周期,每个周期包含的储物柜总数为
5+6+7=18个 - 每个周期内的楼层对应储物柜范围:
- 周期内第1层:5个储物柜(位置1-5)
- 周期内第2层:6个储物柜(位置6-11)
- 周期内第3层:7个储物柜(位置12-18)
核心逻辑
- 计算储物柜编号在周期内的相对位置:用
locker_num % 18,若结果为0则取18(因为18是周期最后一个位置) - 计算所在的周期数:
(locker_num -1) // 18(从0开始计数) - 根据相对位置判断周期内的楼层,再加上周期数对应的楼层偏移量得到总楼层
最优代码(Python)
def get_floor(locker_num): if not isinstance(locker_num, int) or locker_num <= 0: raise ValueError("储物柜编号必须是正整数") cycle_total = 18 cycle_pos = locker_num % cycle_total cycle_pos = cycle_pos if cycle_pos != 0 else cycle_total cycle_num = (locker_num - 1) // cycle_total if cycle_pos <= 5: return cycle_num * 3 + 1 elif cycle_pos <= 11: return cycle_num * 3 + 2 else: return cycle_num * 3 + 3
测试验证
- 输入
19:(19-1)//18=1,19%18=1,1<=5 → 1*3+1=4,符合预期 - 输入
5:返回1 - 输入
11:返回2 - 输入
18:返回3 - 输入
23:23%18=5→ 返回4 - 输入
24:24%18=6→ 返回5
内容的提问来源于stack exchange,提问作者Chris anto
相关产品推荐
相关产品推荐

