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