Seite 1 von 1
Nummerierung nach Muster A1 A2 B1 usw. erzeugen
Verfasst: Dienstag 19. Juni 2012, 20:40
von martinjo
Hallo
Ich weiß nicht warum ich mich bei so kleinen Sachen immer so lange aufhalte. Was würdet ihr hier für eine Lösung wählen wenn man ein Muster Wie im Titel beschrieben anlegen will?
rows = 4
columns = 6
row_letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
Für jede Reihe einen Buchstaben auswählen und diesen nach der Anzahl an Spalten herunterzählen. Ausgabe einfach über print.
A1 B1 C1 D1
A2 B2 C2 D2
A3 ... ... ...
... ... ... ...
Re: Nummerierung nach Muster A1 A2 B1 usw. erzeugen
Verfasst: Dienstag 19. Juni 2012, 20:51
von martinjo
Meine bescheidene Lösung:
Code: Alles auswählen
for x in range(location_rows):
count = 1
for y in range(location_columns):
result = row_letters[x] + str(count)
count = count+1
print result
Re: Nummerierung nach Muster A1 A2 B1 usw. erzeugen
Verfasst: Dienstag 19. Juni 2012, 20:59
von cofi
Code: Alles auswählen
In [5]: def board(columns, rows):
return ["{}{}".format(c, n) for c in string.ascii_uppercase[:columns] for n in xrange(1, rows+1)]
...:
In [6]: board(3, 4)
Out[6]: ['A1', 'A2', 'A3', 'A4', 'B1', 'B2', 'B3', 'B4', 'C1', 'C2', 'C3', 'C4']
In [7]: def board(columns, rows):
return ["{}{}".format(c, n) for n in xrange(1, rows+1) for c in string.ascii_uppercase[:columns]]
...:
In [8]: board(3, 4)
Out[8]: ['A1', 'B1', 'C1', 'A2', 'B2', 'C2', 'A3', 'B3', 'C3', 'A4', 'B4', 'C4']
In [9]: def board(columns, rows):
return [["{}{}".format(c, n) for n in xrange(1, rows+1)] for c in string.ascii_uppercase[:columns]]
...:
In [10]: board(3, 4)
Out[10]: [['A1', 'A2', 'A3', 'A4'], ['B1', 'B2', 'B3', 'B4'], ['C1', 'C2', 'C3', 'C4']]
In [11]: def board(columns, rows):
return [["{}{}".format(c, n) for c in string.ascii_uppercase[:columns]] for n in xrange(1, rows+1)]
....:
In [12]: board(3, 4)
Out[12]:
[['A1', 'B1', 'C1'],
['A2', 'B2', 'C2'],
['A3', 'B3', 'C3'],
['A4', 'B4', 'C4']]
Such dir was aus, wobei die letzte Variante deiner Beschreibung am naehesten kommt.
Wenn du tatsaechlich nur direkt ausgeben willst ist vielleicht das besser:
Code: Alles auswählen
In [18]: def board(columns, rows):
for n in xrange(1, rows+1):
for c in string.ascii_uppercase[:columns]:
print "{}{}".format(c, n),
print
In [19]: board(3, 4)
A1 B1 C1
A2 B2 C2
A3 B3 C3
A4 B4 C4
Re: Nummerierung nach Muster A1 A2 B1 usw. erzeugen
Verfasst: Dienstag 19. Juni 2012, 21:15
von Sr4l
Cofi hat schon ein paar Beispiele, deshalb nur mal ein paar Tipps zu deinem Code.
Wenn du
result = row_letters[x] machst dann willst du nicht
for x in range verwenden sondern sowas machen:
Code: Alles auswählen
row_letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for e in row_letters:
print e
Wenn du vor eine Schleife ein
count = 0 schreibst und in der Schleife dann
count = count + 1 machst ( schöner count += 1 ) dann willst du eigentlich enumerate verwenden.
Code: Alles auswählen
>>> text = 'Hallo'
>>> for i, e in enumerate(text):
... print i, e
...
0 H
1 a
2 l
3 l
4 o
mfG Lars
Re: Nummerierung nach Muster A1 A2 B1 usw. erzeugen
Verfasst: Dienstag 19. Juni 2012, 23:02
von StefanLawl
Sr4l hat geschrieben:Wenn du vor eine Schleife ein
count = 0 schreibst und in der Schleife dann
count = count + 1 machst ( schöner count += 1 ) dann willst du eigentlich enumerate verwenden.
Code: Alles auswählen
>>> text = 'Hallo'
>>> for i, e in enumerate(text):
... print i, e
...
0 H
1 a
2 l
3 l
4 o
Hey, bin Anfänger mit Python. Habe ein Frage: Wofür ist das
e, in
for i,e ...?
Re: Nummerierung nach Muster A1 A2 B1 usw. erzeugen
Verfasst: Dienstag 19. Juni 2012, 23:10
von pillmuncher
Code: Alles auswählen
>>> import itertools, string
>>> map(''.join, itertools.product(string.uppercase[:4], map(str, xrange(1, 5))))
['A1', 'A2', 'A3', 'A4', 'B1', 'B2', 'B3', 'B4', 'C1', 'C2', 'C3', 'C4', 'D1', 'D2', 'D3', 'D4']
Re: Nummerierung nach Muster A1 A2 B1 usw. erzeugen
Verfasst: Dienstag 19. Juni 2012, 23:11
von martinjo
Danke für die vielen Lösungsansätze. string.ascii_uppercase wollte bei mir nicht weil ich string zu importieren vergessen hatte^^
2 Fragen hätte ich noch, warum muss man hier xrange statt range verwenden und wie könnte ich die beiden Funktionen "create_parent_location" und "create_parent_location" verbessern um Teile nicht doppelt schreiben zu müssen?
Hier mein komplettes Skript:
Erläuterung:
Es wird ein Hauptlager angelegt (R01) in dem Warenhaus mit dem Code "STO"
Dann werden die Unterlager nach dem Muster R01_A1 usw. im Lager R01 angelegt.
Code: Alles auswählen
warehouse_code = 'STO'
location_name = 'R01'
location_rows = 4
location_columns = 6
def create_parent_location():
location = Location()
location.name = location_name
location.type = 'storage'
parent = location.find([('code', '=', warehouse_code)])
location.parent = parent[0]
location.save()
def create_locations(result):
location = Location()
location.name = result
location.type = 'storage'
parent = location.find([('name', '=', location_name)])
location.parent = parent[0]
location.save()
def create_units():
for n in xrange(1, location_rows+1):
for c in string.ascii_uppercase[:location_columns]:
sto_unit_name = "{}{}{}{}".format(location_name,'_',c, n)
create_locations(sto_unit_name)
create_parent_location()
create_units()
Re: Nummerierung nach Muster A1 A2 B1 usw. erzeugen
Verfasst: Dienstag 19. Juni 2012, 23:26
von cofi
martinjo hat geschrieben:warum muss man hier xrange statt range verwenden
Muss man nicht, man erstellt nur keine Liste, die man nicht braucht.
martinjo hat geschrieben:und wie könnte ich die beiden Funktionen "create_parent_location" und "create_parent_location" verbessern um Teile nicht doppelt schreiben zu müssen?
Du willst dich mal ueber Funktionsargumente informieren .. die sehen so aus wie die Teile, die du aus meiner Funktion gestrichen hast.
@StefanLawl: Das du ein Anfaenger bist ist kein Grund fremde Threads zu kapern. Bitte erstelle eigene Threads zu fragen, die mit dem Thema nichts zu tun haben, um anderen mit so einer Frage eine Chance zu geben eine Antwort zu finden.
Teste doch mal was passiert, wenn du `x` statt `i, e` benutzt. Wenn du das getan hast, schau dir den letzten absatz
hier an
Re: Nummerierung nach Muster A1 A2 B1 usw. erzeugen
Verfasst: Mittwoch 20. Juni 2012, 00:37
von martinjo
Das Hauptproblem sah ich darin, dass einmal (beim Hauptlager) als Elternlager anhand eines Codes gesucht wird und bei den weiteren Lagern über den Namen. Das habe ich jetzt einfach mit einer if-Schleife gelöst. Damit bin ich erstmal zufrieden. Danke
Re: Nummerierung nach Muster A1 A2 B1 usw. erzeugen
Verfasst: Mittwoch 20. Juni 2012, 01:51
von Leonidas
martinjo hat geschrieben:if-Schleife
if-Schleife