python 多条件 选择 算法_python – 确定值是否在多个范围内的算法

本文介绍了一种简洁的算法,用于检测一个数值是否在以固定倍数变化的区间内,如8-12或28-32。两种解决方案:一是利用取模和减法操作,二是通过找到模数的余数并检查其是否在预期范围内。这两种方法适用于Python编程,适用于数据验证和周期性范围检查。
摘要由CSDN通过智能技术生成

算法问题:

假设我想确定一个值是否在十几倍的范围内(例如2) – 所以,8-12,18-22,28-32等.

我目前的解决方案是将范围添加到值,mod乘以10,然后重新减去范围 – 从而留下-2到8的东西 – 然后检查绝对值是否小于所需范围.

value = 38

range = 2

cycle = 10

tweaked_mod = ((value + range) % cycle) - range

# tweaked_mod = -2

within_range = (abs(tweaked_mod) <= range)

# within_range = True

与:

value = 37

range = 2

cycle = 10

tweaked_mod = ((value + range) % cycle) - range

# tweaked_mod = 7

within_range = (abs(tweaked_mod) <= range)

# within_range = False

它有效,但很尴尬.

我在这里错过了一个更直观/简洁的算法吗?

解决方法:

我发现这个解决方案更容易理解:

remainder = (value % cycle)

(remainder <= range) || (cycle - remainder) <= range

基本上我找到了我在模数(循环)方面搜索的剩余值,然后检查它是否在预期范围内.

替代方案:

另一种解决方案(基本上是相同的)将是:

remainder = (value % cycle)

min(remainder, cycle - remainder) <= range

您可以自由选择您更喜欢的两种解决方案中的任何一种.

注意如果范围<1,则该算法逐字工作.周期.在其他情况下,答案总是如此.

标签:python,algorithm

来源: https://codeday.me/bug/20190728/1564737.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值