einige von Euch haben ja schon mit mir zu tun gehabt. Ich begann vor ca. 25 Jahren mit der Entwicklung von Software, in den letzten Jahren aber eher untergeordnet. Mit python habe ich seit wenigen Monaten und eher gelegentlich zu tun, meine Lieblingssprachen sind Pascal- Derivate und C++.
Ich habe aber beschlossen, mich intensiver in meiner Freizeit mit der Schlange zu beschäftigen. Fernziel (also irgendwann in 5 Jahren, je nachdem, wieviel Freizeit mir so bleibt
Habe auf einer Zugfahrt dann auch mal begonnen. Die folgende Funktion ist im Grunde so programmiert, wie ich es in anderen Sprachen auch tun würde (mal abgesehen von diversem sprachspezifischen Schnickschnack, um das zu optimieren.
Ziel ist es, aus übergebenen Achseneigenschaften (Minimum, Maximum, Schrittweite) die Achsenabschnitte für ein Koordinatensystem zu generieren, mit folgenden Besonderheiten:
- wenn nicht gerade (0,0,0) o.ä. übergeben wurde, dann soll er immer irgend etwas produzieren
- wenn die Reihenfolge vertauscht oder eine negative Schrittweite eingegeben wurde, dann soll er das auflösen
- Wenn es einen Nulldurchgang gibt, dann soll der Achsenabschnitt auch auf 0 landen
Der Code ist natürlich zugegebener Maßen sehr umständlich. (numpy hatte ich im Zug nicht, daher ohne)
Wenn jemand Lust hat, dann möge er mich belehren, wie man das in python wirklich macht.
Code: Alles auswählen
MIN_STEP_COUNT = 6.
MAX_STEP_COUNT = 20.
#import numpy
def my_range(my_min, my_max, my_step):
if my_step<0:
my_step = -my_step
if my_max < my_min:
my_min, my_max = my_max, my_min
if my_max == my_min:
my_max = my_max + MIN_STEP_COUNT * my_step
my_min = my_min - MIN_STEP_COUNT * my_step
if my_step < (my_max - my_min)/MAX_STEP_COUNT:
my_step = (my_max - my_min)/MAX_STEP_COUNT
if my_step > (my_max - my_min)/MIN_STEP_COUNT:
my_step = (my_max - my_min)/MIN_STEP_COUNT
result = []
if my_step>0:
if (my_min < 0) and (my_max > 0):
my_x = 0
while my_x > my_min:
result.append (my_x)
my_x -= my_step
my_x = my_step
while my_x < my_max:
result.append (my_x)
my_x += my_step
else:
my_x = my_step
while my_x < my_max:
result.append (my_x)
my_x += my_step
result.sort()
return result
- my_* kommt daher, dass zumindest die Android- Variante meckerte, wenn ich max oder min verwendet habe. Also habe ich dann konsequent my_ davorgesetzt
- ich weiß, ich komme ohne "result" aus, aber da ich noch nicht sicher bin und für das debuggen ein "print result" ganz nützlich sein kann - gerade auf dem Tablet ohne Debugger - würde ich es gern behalten.
