development

정수가 다른 두 정수 사이에 있는지 확인

big-blog 2020. 3. 15. 09:37
반응형

정수가 다른 두 정수 사이에 있는지 확인


주어진 정수가 다른 두 정수 사이에 있는지 어떻게 알 수 있습니까 (예 :보다 크거나 같고 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!")

세 정수를 비교하고 bac 사이에 있는지 확인하는 두 가지 방법 이 있습니다 .

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

반응형