Bepalen of geheel getal tussen twee andere gehele getallen ligt?

Hoe bepaal ik of een bepaald geheel getal tussen twee andere gehele getallen ligt (bijv. groter dan/gelijk aan 10000en kleiner dan/gelijk aan 30000)?

Ik gebruik 2.3 IDLE en wat ik tot nu toe heb geprobeerd, werkt niet:

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

Antwoord 1, autoriteit 100%

if 10000 <= number <= 30000:
    pass

Zie de docsvoor meer informatie.


Antwoord 2, autoriteit 8%

>>> 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

Antwoord 3, autoriteit 4%

Uw operator is onjuist. Moet if number >= 10000 and number <= 30000:zijn. Bovendien heeft Python een afkorting voor dit soort dingen, if 10000 <= number <= 30000:.


Antwoord 4, autoriteit 3%

Uw codefragment,

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

controleert feitelijk of het getal groter is dan zowel 10000 als 30000.

Ervan uitgaande dat u wilt controleren of het getal tussen 10000 en 30000 ligt, kunt u de Python-intervalvergelijking gebruiken:

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

Deze Python-functie wordt verder beschreven in de Python-documentatie.


Antwoord 5

Er zijn twee manierenom drie gehele getallen te vergelijken en te controleren of btussen aen cligt:

if a < b < c:
    pass

en

if a < b and b < c:
    pass

De eerste lijkt beter leesbaar, maar de tweede werkt sneller.

Laten we vergelijken met 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
>>>

en met behulp van 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

Mogelijk kunt u Bereik gebruiken, zoals eerder gesuggereerd, maar het is echter veel langzamer.


Antwoord 6

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

Antwoord 7

Definieer het bereik tussen de nummers:

r = range(1,10)

Gebruik het vervolgens:

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

Antwoord 8

De problemen met vergelijkingen is dat ze moeilijk kunnen zijn om te debuggen wanneer u een >=indient, waarbij er een <=

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

Python laat je gewoon schrijven wat je in woorden bedoelt

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

In Python3 moet u rangegebruiken in plaats van xrange.

EDIT: Mensen lijken meer bezig te houden met Microbench Marks en hoe koele rijbewerkingen. Mijn antwoord gaat over defensieve (minder aanvalsoppervlak voor bugs) programmeren.

Als gevolg van een claim in de opmerkingen, heb ik hier de micro-benchmark toegevoegd voor 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

Als u zich zorgen maakt over de prestaties, kunt u het bereik eenmaal

berekenen

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

Antwoord 9

Stel dat er 3 niet-negatieve gehele getallen zijn: a, b, EN c. Wiskundig spreekt, als we willen bepalen of cis tussen aen b, inclusief, men kan deze formule gebruiken:

(C – A) * (B – C) & GT; = 0

of in Python:

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

Antwoord 10

U wilt de uitvoer om de gegeven verklaring af te drukken, indien en alleen als het aantal tussen 10.000 en 30.000 valt.

code zou moeten zijn;

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

Antwoord 11

Nog een andere oplossing

def check_if_between_range(current, start, end):
    if current == start or end:
        return True
    elif start < end:
        return current in range(start, end)
    else:
        return current in range(end, start)

Antwoord 12

De voorwaarde moet zijn,

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

reden voor het gebruik van number == 10000is dat als de waarde van het nummer 50000 is en als we number >= 10000gebruiken, de voorwaarde zal slagen, wat niet is wat je wil.

Other episodes