简单的在某一区间循环遍历的方法

本文介绍了一种在离散区间[a,b]内进行数字遍历的算法,通过数学运算确保数字在区间内循环增减,适用于如图片轮播等场景。提供了Python代码实现,演示了如何在指定区间内进行步进操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# -*- coding:utf8 -*-
# 很多时候需要在离散区间[a, b]顺序遍历数字,比如现在有8张loading图,名字为loading_ui_1 -- loadding_ui_8
# 其中最后那个数字是变的,如果要轮播这些图,就相当于在离散区间[1, 8]遍历数字,当遍历到loading_ui_8的时候,下一个背景图应该是loading_ui_1
# 则问题可以转换为数学描述
# 离散区间[a, b]中有一个数字为i, 需要让i+1(其实i的任何加减运算都适用)仍然处于区间[a, b]
# 先分析, i 在 [a, b] 区间,
# 可以表示为 i-a 在 [0, b-a] (表示[0, x] 就是为了可以作%运算)
# 那么对于 i-a 的任何加减运算只要%(b-a+1)就可以保证变化后仍处于[0, b-a]区间
# 所以 ((i-a)+1)%(b-a+1) 代表把 i 在区间[a, b]上的 i+1 运算 映射到区间[0, b-a]上,
# 现在把这个值再映射回到区间 [a, b], 区间[0, b-a]到[a, b]只需要加上a,即有 (i-a+1)%(b-a+1)+a
# 更一般地对于所有i加减运算,用f(i)表示
# 则一般式为 f(i-a) % (b-a+1) + a
# 现在代码验证

# 区间循环遍历
def IntervalTraversal(i, a, b, func):
    """
    @param i: 处于区间[a, b]的数
    @param a: 区间[a, b]的下限
    @param b: 区间[a, b]的上限
    @param func: 对i的变化
    @return:
    """
    assert a <= i <= b and callable(func)
    return func(i-a) % (b-a+1) + a


# example as follows
num = 3
print 'increase step by 1:'
for i in xrange(10):
    num = IntervalTraversal(num, 1, 8, lambda n: n+1)
    print num

num = 4
print 'decrease step by 2'
for i in xrange(10):
    num = IntervalTraversal(num, 1, 8, lambda n: n-2)
    print num

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值