Python: Warum gibt `random.randint (a, b)` einen Bereich einschließlich 'b' zurück?
Es hat immer schien mir seltsam, dass random.randint(a, b)
zurückkehren würde, eine ganze Zahl im Bereich [a, b]
statt [a, b-1]
wie range(...)
.
Gibt es einen Grund für diese scheinbare Inkonsistenz?
InformationsquelleAutor der Frage David Wolever | 2010-04-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich versucht auf den Grund zu gehen, diese durch die Untersuchung einige alte Quellen. Ich Verdachtdass
randint
umgesetzt wurde, bevor Python long integer": das heißt, wenn Sie wollten, eine zufällige Nummer enthalten, dieINT_MAX
Sie würden benötigt, um Anruf -random.randrange(0, INT_MAX + 1)
hätte über die Ufer und führte in den Argumenten(0, 0)
oder(0, INT_MIN)
je.Jedoch, auf der Suche so weit zurück, wie auch die Python 1.5.2 Quellenin
Lib/whrandom.py
wir sehen:whrandom.randint
fortgesetzt wurde, als veraltet in 2.02.12.2und 2.3; aberrandom.randint
wurde als veraltet markiert in 2.1obwohl nicht mehr als veraltet markiert in 2.2.Auch,
random.py
ab version 2.1 ist der erste Hinweis inrandom.randint
's docstring:Die einzige verfügbare Quelle, die älter als das ist die 0.9.1 Quelleund soweit ich das beurteilen kann,
randint
wurde nicht umgesetzt.So, ich schließe daraus, dass die Begründung für
randint
einschließlich der Endpunkt bekannt ist, nur Guido sich an dieser Stelle, angesichts der docstring von Python 2.1, es klingt wie der Grund, kann ein einfacher Fehler.InformationsquelleAutor der Antwort Mark Rushakoff
Ich denke
random.randint
war nur der erste Versuch, dieses feature implementieren. Es scheint, dass die Python-Entwickler haben auch das Gefühl, dass dies war ein problem, das ist, warum in v1.5.2 hat Sie eine weitere Methode randrange mit mehr standard-Parameter:Können Sie
randrange
stattrandint
zu vermeiden, überraschende Menschen.Auf der anderen Seite, in vielen Situationen, wo das problem ist so formuliert, als 'wählen Sie eine zufällige Zahl zwischen 1 und 6', könnte es sein natürlicher zu bedienen
randint(1, 6)
statt zu schreibenrandrange(1, 7)
oderrandrange(min, max + 1)
.InformationsquelleAutor der Antwort Mark Byers
Dies ist Spekulation, aber normale menschliche Nutzung von 'gib mir eine Zufallszahl von a nach b' ist inklusive. Umsetzung das so irgendwie Sinn macht, da Python die Allgemeine Philosophie des seins eine mehr menschenlesbare Sprache.
InformationsquelleAutor der Antwort DNS
Ich glaube nicht, dass es einen Grund dafür. Aber zumindest ist es dokumentiert.
InformationsquelleAutor der Antwort Wieland