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 ... ... ...
... ... ... ...
Nummerierung nach Muster A1 A2 B1 usw. erzeugen
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- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
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']]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 C4Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- Sr4l
- User
- Beiträge: 1091
- Registriert: Donnerstag 28. Dezember 2006, 20:02
- Wohnort: Kassel
- Kontaktdaten:
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:
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.
mfG Lars
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 eCode: Alles auswählen
>>> text = 'Hallo'
>>> for i, e in enumerate(text):
... print i, e
...
0 H
1 a
2 l
3 l
4 o- StefanLawl
- User
- Beiträge: 92
- Registriert: Donnerstag 7. Juni 2012, 20:23
Hey, bin Anfänger mit Python. Habe ein Frage: Wofür ist das e, in for i,e ...?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
Man sagt uns wir sollen der Idee gedenken und nicht des Mannes. Denn ein Mensch kann versagen. Er kann gefangen werden. Er kann getötet und vergessen werden. Aber 400 Jahre später kann eine Idee immer noch die Welt verändern.
-V
-V
- pillmuncher
- User
- Beiträge: 1532
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
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']In specifications, Murphy's Law supersedes Ohm's.
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.
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()- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Muss man nicht, man erstellt nur keine Liste, die man nicht braucht.martinjo hat geschrieben:warum muss man hier xrange statt range verwenden
Du willst dich mal ueber Funktionsargumente informieren .. die sehen so aus wie die Teile, die du aus meiner Funktion gestrichen hast.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?
@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
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
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
-
Leonidas
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
if-Schleifemartinjo hat geschrieben:if-Schleife
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
