Warum ist bei randint(a,b) das b miteingeschlossen, aber bei range(a,b) nicht?

3 Antworten

Weil man random.randint(a, b) benutzt, wenn man b mit eingeschlossen haben möchte. Dabei ist random.randint(a, b) quasi nur eine andere Bezeichnung für random.randrange(a, b + 1).

Es gibt nämlich andererseits auch die Funktion random.randrange(a, b), bei der dann b nicht mit eingeschlossen ist. Und ich würde eher random.randrange(a, b) mit range(a, b) vergleichen als random.randint(a, b) mit range(a, b) zu vergleichen.

Siehe auch:


MrAmazing2 
Beitragsersteller
 23.11.2021, 19:31

Und die Python Devs dachten sich echt sie machen eine extra Funktion nur für ein +1?
Weird

Ich glaube das ist einfach, weil bei randint will man von der Zahl bis einschließlich die Zahl haben. Bei range geht es aber nur um den Bereich von bis. Die Bis Zahl ist dabei nicht einbezogen. Man sagt ja auch in einem Bereich von bis und nicht von einschließlich bis. Bei random sagt man nur eine Zahl zwischen start und ende. Hierbei werden dann denke ich einfach beide Zahlen mit eingebunden aufgrund der Verständlichkeit. Ich bin mir im allgemeinen nicht 100% sicher, aber so macht es für mich schon irgendwie Sinn


Dultus  23.11.2021, 10:39
Man sagt ja auch in einem Bereich von bis und nicht von einschließlich bis.

Das ist das schön inkonsistente :o)

In C# bei einem Random(0, 10); werden nur Zahlen von 0 bis einschließlich 9 ausgegeben. :-)

FaTech  23.11.2021, 10:44
@Dultus

Naja, mir ist gerade was aufgefallen 😅 In der Python Documentation steht drin, dass es als randrange gehandhabt wird, allerdings wird die letzte Zahl +1 gerechnet, wodurch es so raus kommt. Eine tiefere Erklärung wurde hier nicht genannt, aber ich vermute mal, man wollte damit einfach das bezwecken, wie ich es oben schon sagte. Wieso das in C# anders ist, ist am Ende ja einfach, dass dort vermutlich ähnlich gearbeitet wurde, aber das +1 halt fehlt. C# wurde auch von anderen Entwicklern gemacht.

https://docs.python.org/3/library/random.html

ach das hat so seine mathematischen gründe .

man hat immer einen bruch genommen . wobei der kleiner wert (mindestens minus 1 ) oben ist und der größere wert unterhalb des bruches ist . es soll nie gleich sein , ergo kann es den wert 1 auch nicht geben . (ob das jetzt mathematisch so richtig erklärt ist, lass ich mal dahingestellt sein ) .

https://de.wikipedia.org/wiki/Arithmetischer_Zufallszahlengenerator

somit ergab sich [0,1[

das waren auch immer Pseudozufallszahlen , ein start wert ist dann meist die computer zeit , zur zeit wo es noch keine BIOS batterie etc gab, konnte man also beim einschalten schon wissen wie die zufalls reihenfolge sein wird . das hat man dann aber versucht zu umgehen . zufallsgeneratoren haben sich also mit der Zeit erst entwickelt weil man technische lösungen gefunden hat.

dem programmierer ist es egal , der denkt eh wie ein computer, aber der Mensch mit seinen gewohnheiten denkt wie ein Mensch und er tut sich sau schwer aus seiner bequemlichkeit zu verabschieden, ergo hat man dann eine funktion gemacht, die ganzzahlen produziert und eher menschlich darstellt also von bis ist dann halt inklusive und nciht nur das bis zu der zahl .

ergo wenn ich sage, von heute bis morgen

meine ich eigentlich 0:00:00 uhr heute bis 23:59:59

und nicht 0:00:00 heute bis morgen 0:00:00

und da wäre dir das völlig klar , das du die 0:00:00 des nächsten tages raus nimmst.

aber bei 1 bis 10 , denkst du natürlich 1 inklusive 10 .

so schlecht ist unser verständis , wir sind genauso inkonsequent :)