确定整数是否介于另外两个整数之间

2024-12-16 08:35:00
admin
原创
172
摘要:问题描述:如何确定给定的整数是否介于两个其他整数之间(例如大于/等于10000和小于/等于30000)?解决方案 1:if 10000 <= number <= 30000: pass 有关详细信息,请参阅文档。解决方案 2:>>> r = range(1, 4) >...

问题描述:

如何确定给定的整数是否介于两个其他整数之间(例如大于/等于10000和小于/等于30000)?


解决方案 1:

if 10000 <= number <= 30000:
    pass

有关详细信息,请参阅文档。

解决方案 2:

>>> r = range(1, 4)
>>> 1 in r
True
>>> 2 in r
True
>>> 3 in r
True
>>> 4 in r
False
>>> 5 in r
False
>>> 0 in r
False

解决方案 3:

使用if number >= 10000 and number <= 30000:。另外,Python 对这种事情有一个简写,if 10000 <= number <= 30000:

解决方案 4:

要检查数字是否在 10000 - 30000 范围内,请使用 Python 间隔比较:

if 10000 <= number <= 30000:
    print ("you have to pay 5% taxes")

此 Python 特性在 Python 文档中有进一步描述。

解决方案 5:

两种方法可以比较三个整数并检查b是否介于ac之间:

if a < b < c:
    pass

if a < b and b < c:
    pass

第一个看起来更易读,但第二个运行得更快

让我们使用dis.dis进行比较:

>>> dis.dis('a < b and b < c')
  1           0 LOAD_NAME                0 (a)
              2 LOAD_NAME                1 (b)
              4 COMPARE_OP               0 (<)
              6 JUMP_IF_FALSE_OR_POP    14
              8 LOAD_NAME                1 (b)
             10 LOAD_NAME                2 (c)
             12 COMPARE_OP               0 (<)
        >>   14 RETURN_VALUE
>>> dis.dis('a < b < c')
  1           0 LOAD_NAME                0 (a)
              2 LOAD_NAME                1 (b)
              4 DUP_TOP
              6 ROT_THREE
              8 COMPARE_OP               0 (<)
             10 JUMP_IF_FALSE_OR_POP    18
             12 LOAD_NAME                2 (c)
             14 COMPARE_OP               0 (<)
             16 RETURN_VALUE
        >>   18 ROT_TWO
             20 POP_TOP
             22 RETURN_VALUE
>>>

并使用timeit

~$ python3 -m timeit "1 < 2 and 2 < 3"
10000000 loops, best of 3: 0.0366 usec per loop

~$ python3 -m timeit "1 < 2 < 3"
10000000 loops, best of 3: 0.0396 usec per loop

另外,您也可以使用range,如之前所建议的,但它要慢得多。

解决方案 6:

定义数字之间的范围:

r = range(1,10)

然后使用它:

if num in r:
    print("All right!")

解决方案 7:

if number >= 10000 and number <= 30000:
    print ("you have to pay 5% taxes")

解决方案 8:

以下是几种可能的方法,按性能从好到差的顺序排列(即第一个方法性能最好)

     # Old school check
     if 10000 <= b and b <=30000:
        print ("you have to pay 5% taxes")
     # Python range check
     if 10000 <= number <= 30000:
        print ("you have to pay 5% taxes")
     # As suggested by others but only works for integers and is slow
     if number in range(10000,30001):
        print ("you have to pay 5% taxes")

解决方案 9:

Python 允许你直接用文字写下你的意思:

if number in xrange(10000, 30001): # ok you have to remember 30000 + 1 here :)

在Python3中,使用range而不是xrange

编辑:人们似乎更关心微基准测试以及酷炫的链式操作。我的答案是关于防御性(更少的漏洞攻击面)编程。

根据评论中的声明,我在这里为 Python3.5.2 添加了微基准

$ python3.5 -m timeit "5 in range(10000, 30000)"
1000000 loops, best of 3: 0.266 usec per loop
$ python3.5 -m timeit "10000 <= 5 < 30000"
10000000 loops, best of 3: 0.0327 usec per loop

如果你担心性能,你可以计算一次范围

$ python3.5 -m timeit -s "R=range(10000, 30000)" "5 in R"
10000000 loops, best of 3: 0.0551 usec per loop

解决方案 10:

虽然10 <= number <= 20在 Python 中有效,但我发现使用这种符号range()更具可读性:

if number in range(10, 21):
    print("number is between 10 (inclusive) and 21 (exclusive)")
else:
    print("outside of range!")

请记住,第二个上限参数不包含在范围设置中,可以通过以下方法验证:

>>> list(range(10, 21))
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

但是,range()仅当该方法不在某些性能关键路径上运行时才优先考虑该方法。单次调用对于大多数要求来说仍然足够快,但如果运行 10,000,000 次,我们会清楚地注意到与以下方法相比,性能降低了近 3 倍a <= x < b

> { time python3 -c "for i in range(10000000): x = 50 in range(1, 100)"; } 2>&1 | sed -n 's/^.*cpu (.*) total$//p'
1.848

> { time python3 -c "for i in range(10000000): x = 1 <= 50 < 100"; } 2>&1 | sed -n 's/^.*cpu (.*) total$//p'
0.630

解决方案 11:

假设有 3 个非负整数:abc。从数学上讲,如果我们想确定 是否c介于a和之间b(包括 和 ),可以使用以下公式:

(c - a)*(b - c)> = 0

或者用 Python 来写:

> print((c - a) * (b - c) >= 0)
True

解决方案 12:

我正在添加一个还没有人提到的解决方案,使用 sympy 库中的 Interval 类:

from sympy import Interval

lower_value, higher_value = 10000, 30000
number = 20000

 # to decide whether your interval shhould be open or closed use left_open and right_open 
interval = Interval(lower_value, higher_value, left_open=False, right_open=False)
if interval.contains(number):
    print("you have to pay 5% taxes")

解决方案 13:

您希望当且仅当数字介于 10,000 和 30,000 之间时,输出才打印给定的语句。

代码应该是;

if number >= 10000 and number <= 30000:
    print("you have to pay 5% taxes")

解决方案 14:

尝试这个简单的函数;它检查是否A介于B和之间CB并且C可能顺序不正确):

def isBetween(A, B, C):
    Mi = min(B, C)
    Ma = max(B, C)
    return Mi <= A <= Ma

所以isBetween(2, 10, -1)与 相同isBetween(2, -1, 10)

解决方案 15:

您使用了 >=30000,因此如果数字是 45000,它将进入循环,但我们需要它大于 10000 但小于 30000。将其更改为 <=30000 就可以了!

解决方案 16:

条件应该是,

if number == 10000 and number <= 30000:
     print("5% tax payable")

使用原因number == 10000是,如果数字的值为 50000,并且我们使用number >= 10000条件就会通过,但这不是您想要的。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用