Wie bestimme ich, ob eine bestimmte Ganzzahl zwischen zwei anderen Ganzzahlen liegt (z. B. größer als / gleich 10000
und kleiner als / gleich 30000
)?
Ich verwende 2.3 IDLE und was ich bisher versucht habe, funktioniert nicht:
if number >= 10000 and number >= 30000:
print ("you have to pay 5% taxes")
Antworten:
quelle
if number in range(10000, 30001)
dem, was von einer anderen Lösung vorgeschlagen wird? Ist es außerdem schneller oder langsamer, wenn esset
anstelle von verwendet wirdrange
?number
wird zunächst der Vergleich verglichen10000
. Wenn es kleiner als10000
der Ausdruck ist, wird er sofort kurzgeschlossen und der zweite Vergleich wird nicht überprüft. Die Komplexität istO(1)
.in range(0, n)
generiert stattdessen die gesamte Zahlenfolge und durchläuft sie dann. Die Komplexität istO(n)
. Die Komplexität vonin set(range(0, n))
ist immer noch,O(n)
weil dasO(n)
Erstellen> python -m timeit '10000 <= 10 <= 30000'
> python -m timeit '10 in range(10000, 30001)'
> python -m timeit '10 in set(range(10000, 30001))'
quelle
range
(oderxrange
in Python2), dass ein Generator zurückgegeben wird, sodass Sie ihn nicht wiederholt testen können.4 in range(1,4)
falsch ist. Verwenden1 >= r <= 4
Sie also besser das, da es mögliche Fehler von Neulingen vermeidet1.5 in r
gibtFalse
auch in 3.4. Diese Antwort ist nur für ganze Zahlen gut.1 <= r <= 4
if a <= x <= b
...) handelt. (2.) funktioniert nicht fürfloat
Typen (3) .) Der Reichweitentest ist nicht inklusive ... so viele Entwickler können Fehler einführen, weil sie eine inklusive Reichweite erwartenIhr Operator ist falsch. Sollte sein
if number >= 10000 and number <= 30000:
. Zusätzlich hat Python eine Abkürzung für diese Art von Dingenif 10000 <= number <= 30000:
.quelle
Ihr Code-Snippet,
prüft tatsächlich, ob die Anzahl größer als 10000 und 30000 ist.
Angenommen, Sie möchten überprüfen, ob die Zahl im Bereich von 10000 bis 30000 liegt, können Sie den Python-Intervallvergleich verwenden:
Diese Python-Funktion wird in der Python-Dokumentation näher beschrieben .
quelle
quelle
Das Problem bei Vergleichen ist, dass es schwierig sein kann, sie zu debuggen, wenn Sie eine setzen,
>=
wo es eine geben sollte<=
Mit Python können Sie einfach schreiben, was Sie in Worten meinen
In Python3 müssen Sie
range
anstelle von verwendenxrange
.Bearbeiten: Die Leute scheinen sich mehr mit Mikrobench-Markierungen und den coolen Verkettungsvorgängen zu beschäftigen. Meine Antwort bezieht sich auf defensive (weniger Angriffsfläche für Fehler) Programmierung.
Aufgrund einer Behauptung in den Kommentaren habe ich hier den Mikro-Benchmark für Python3.5.2 hinzugefügt
Wenn Sie sich Sorgen um die Leistung machen, können Sie den Bereich einmal berechnen
quelle
range(10000, 30001)
in Python3 verwenden. Es wird keine Liste erstelltxrange
in Python2 oderrange
in Python3 haben Mitgliedschaftstests. Probieren Sie es selbst aus, wenn Sie nicht glauben.<=
ist nur effizienter, weil es kein Bereichsobjekt erstellt. Beides als O (1). Der Punkt ist der OP wurde versucht , es auf deine Weise zu tun , und mit einem Fehler endete . Schneller Code, der falsch ist, ist schlimmer.Definieren Sie den Bereich zwischen den Zahlen:
Dann benutze es:
quelle
range
zählt in Ihrem Fall nicht den letzten Wert 10 .range(1,11)
ist richtig, wenn Sie zwischen 1 und 10 vergleichen müssenEs gibt zwei Möglichkeiten , drei Ganzzahlen zu vergleichen und zu überprüfen, ob b zwischen a und c liegt :
und
Der erste sieht besser lesbar aus, der zweite läuft schneller .
Vergleichen wir mit dis.dis :
und mit timeit :
Sie können auch die Reichweite verwenden , wie zuvor vorgeschlagen, sie ist jedoch viel langsamer.
quelle
Angenommen , es gibt 3 nicht negative ganze Zahlen:
a
,b
, undc
. Mathematisch gesehen kann man diese Formel verwenden , wenn wir feststellen wollen, obc
zwischena
undb
einschließlich liegt:oder in Python:
quelle
Sie möchten, dass die Ausgabe die angegebene Anweisung genau dann druckt, wenn die Anzahl zwischen 10.000 und 30.000 liegt.
Code sollte sein;
quelle
Die Bedingung sollte sein,
Grund für die Verwendung
number == 10000
ist, dass wenn der Wert der Zahl 50000 ist und wirnumber >= 10000
die Bedingung erfüllen, dies nicht das ist, was Sie wollen.quelle