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

# -*- 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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值