我正在使用2.3 IDLE而且我遇到了问题.
我需要检查一个数字是否介于两个其他数字10000和30000之间:
if number >= 10000 and number >= 30000:
print ("you have to pay 5% taxes")
Run Code Online (Sandbox Code Playgroud)
它运作得不好.
Pao*_*tti 884
if 10000 <= number <= 30000:
pass
Run Code Online (Sandbox Code Playgroud)
Boh*_*dan 65
>>> 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
Run Code Online (Sandbox Code Playgroud)
Sil*_*Ray 46
您的操作员不正确.应该if number >= 10000 and number <= 30000:
.另外,Python有这种东西的简写,if 10000 <= number <= 30000:
.
Car*_*rot 26
你的代码片段,
if number >= 10000 and number >= 30000:
print ("you have to pay 5% taxes")
Run Code Online (Sandbox Code Playgroud)
实际检查数字是否大于10000和30000.
假设您要检查该数字是否在10000 - 30000范围内,您可以使用Python间隔比较:
if 10000 <= number <= 30000:
print ("you have to pay 5% taxes")
Run Code Online (Sandbox Code Playgroud)
小智 15
有两种方法可以比较三个整数并检查b是否在a和c之间:
if a < b < c:
pass
Run Code Online (Sandbox Code Playgroud)
和
if a < b and b < c:
pass
Run Code Online (Sandbox Code Playgroud)
第一个看起来更具可读性,但第二个运行得更快。
让我们使用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
>>>
Run Code Online (Sandbox Code Playgroud)
并使用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
Run Code Online (Sandbox Code Playgroud)
此外,您可以使用range,如前所述,但它要慢得多。
小智 13
以下是几种可能的方法,按性能从最好到最差的顺序排列(即第一个性能最好)
# 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")
Run Code Online (Sandbox Code Playgroud)
if number >= 10000 and number <= 30000:
print ("you have to pay 5% taxes")
Run Code Online (Sandbox Code Playgroud)
虽然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!")
Run Code Online (Sandbox Code Playgroud)
请记住,第二个上限参数不包含在范围集中,可以通过以下方式验证:
>>> list(range(10, 21))
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
Run Code Online (Sandbox Code Playgroud)
但是,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$/\1/p'
1.848
> { time python3 -c "for i in range(10000000): x = 1 <= 50 < 100"; } 2>&1 | sed -n 's/^.*cpu \(.*\) total$/\1/p'
0.630
Run Code Online (Sandbox Code Playgroud)
比较的问题在于,当你放置>=
应该有的地方时,它们很难调试<=
# v---------- should be <
if number >= 10000 and number >= 30000:
print ("you have to pay 5% taxes")
Run Code Online (Sandbox Code Playgroud)
Python让你只需在文字中写下你的意思
if number in xrange(10000, 30001): # ok you have to remember 30000 + 1 here :)
Run Code Online (Sandbox Code Playgroud)
在Python3中,您需要使用range
而不是xrange
.
编辑:人们似乎更关心microbench标记和酷链操作.我的答案是关于防御性(针对错误的攻击面较少)编程.
作为评论中的主张,我在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
Run Code Online (Sandbox Code Playgroud)
如果您担心性能,可以计算一次范围
$ python3.5 -m timeit -s "R=range(10000, 30000)" "5 in R"
10000000 loops, best of 3: 0.0551 usec per loop
Run Code Online (Sandbox Code Playgroud)
小智 6
定义数字之间的范围:
r = range(1,10)
Run Code Online (Sandbox Code Playgroud)
然后使用它:
if num in r:
print("All right!")
Run Code Online (Sandbox Code Playgroud)
假设有 3 个非负整数:a
、b
、 和c
。从数学上来说,如果我们想确定 是否c
介于a
和 之间b
(包含 和 ),可以使用以下公式:
(c - a) * (b - c) >= 0
或者在Python中:
> print((c - a) * (b - c) >= 0)
True
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
541625 次 |
最近记录: |