确定整数是否介于另外两个整数之间
- 2024-12-16 08:35:00
- admin 原创
- 172
问题描述:
如何确定给定的整数是否介于两个其他整数之间(例如大于/等于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是否介于a和c之间:
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 个非负整数:a
、b
和c
。从数学上讲,如果我们想确定 是否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
和之间C
(B
并且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
条件就会通过,但这不是您想要的。