정수가 다른 두 정수 사이에 있는지 확인
주어진 정수가 다른 두 정수 사이에 있는지 어떻게 알 수 있습니까 (예 :보다 크거나 같고 10000
보다 작거나 같습니다 30000
)?
2.3 IDLE을 사용하고 있으며 지금까지 시도한 것이 작동하지 않습니다.
if number >= 10000 and number >= 30000:
print ("you have to pay 5% taxes")
if 10000 <= number <= 30000:
pass
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
운영자가 잘못되었습니다. 이어야 if number >= 10000 and number <= 30000:
합니다. 또한 파이썬에는 이런 종류의 줄임말이 if 10000 <= number <= 30000:
있습니다.
코드 스 니펫
if number >= 10000 and number >= 30000:
print ("you have to pay 5% taxes")
실제로 숫자가 10000과 30000보다 큰지 확인합니다.
숫자가 10000-30000 범위에 있는지 확인한다고 가정하면 Python 간격 비교를 사용할 수 있습니다.
if 10000 <= number <= 30000:
print ("you have to pay 5% taxes")
이 Python 기능은 Python 설명서에 자세히 설명 되어 있습니다 .
if number >= 10000 and number <= 30000:
print ("you have to pay 5% taxes")
비교의 문제는 당신 >=
이 있어야 할 곳에 넣을 때 디버깅하기가 어렵다는 것입니다.<=
# v---------- should be <
if number >= 10000 and number >= 30000:
print ("you have to pay 5% taxes")
파이썬은 당신 이 말로 의미하는 것을 쓸 수있게합니다
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
숫자 사이의 범위를 정의하십시오.
r = range(1,10)
그런 다음 사용하십시오.
if num in r:
print("All right!")
세 정수를 비교하고 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를 사용할 수 있지만 훨씬 느립니다.
참고 URL : https://stackoverflow.com/questions/13628791/determine-whether-integer-is-between-two-other-integers
'development' 카테고리의 다른 글
Vim에서 전체 라인을 위아래로 이동 (0) | 2020.03.15 |
---|---|
설치 스크립트가 오류와 함께 종료되었습니다 : 'x86_64-linux-gnu-gcc'명령이 종료 상태 1로 실패했습니다. (0) | 2020.03.15 |
div가 표시 될 때 작업을 트리거하는 jQuery 이벤트 (0) | 2020.03.15 |
javadoc에서 메소드 매개 변수에 대한 참조를 추가하는 방법은 무엇입니까? (0) | 2020.03.15 |
Java에서 함수 포인터를 대체하는 가장 가까운 것은 무엇입니까? (0) | 2020.03.15 |