Hallo,
bin gerade dabei Python zu lernen. Ich habe ein Programm geschrieben, das mir Lottoreihen ausgibt. Diese Reihen sollen in eine Textdatei geschrieben werden, damit man sie ausdrucken kann. Das funktioniert soweit ganz gut, nur werden die Reihen alle nacheinander weg in die Datei geschrieben. Also so [1,2,5,4,6,7] [7,49,2,7,4,16] etc.
Ich würde aber gerne jeden Zahlenblock untereinander stehen haben. Außerdem wäre es schön, wenn vor jedem Block sowas wie "Reihe 1:" etc stehen würde. Das ist mir bisher auch nicht gelungen...
edit: ok, das mit der Reihenbezeichnung hab ich geschafft - fehlt noch diese hintereinander-Reihung wegzubekommen :K
String in Textdatei schreiben
Schau Dir mal "7.1.2 String Formatting" (http://docs.python.org/library/string.h ... formatting) und "7.1.3. Format String Syntax" (http://docs.python.org/library/string.h ... ing-syntax) in der Python-Dokumentation an. Da findest Du sicher etwas.
https://www.xing.com/go/invite/18513630.6a91d4
Code: Alles auswählen
import random
x = 1
while x <= 4:
random.seed()
count = 0
numberlist = []
while (count < 6):
temp = random.randint(1,49)
if (numberlist.count(temp) == 0):
numberlist.append(temp)
count = count + 1
numberlist.sort()
print numberlist
string1 = str(numberlist)
string2 = str(x)
workspace = r"c:\Dokumente und Einstellungen\..." # Pfad eintragen, wo Datei gespeichert werden soll
f = open("lottozahlen.txt", "a")
f.write('Block ')
f.write(string2)
f.write(': ')
f.write(string1)
f.close()
x = x + 1
Code: Alles auswählen
@pauli_fc: Du solltest vier Leerzeichen pro Einrückebene verwenden. Eines ist eindeutig zu wenig, das sieht man ja kaum. Die Einrückungung soll ja nicht nur dem Compiler sagen was zusammengehört, sondern auch Menschen das Lesen erleichtern.
Wenn man vor Eintritt in eine Schleife schon weiss wie oft sie durchlaufen wird, ist eine ``for``-Schleife vorzuziehen.
`random.seed()` aufzurufen ist unnötig. Das wiederholte Aufrufen kann das Ergebnis sogar *weniger* zufällig machen, also weg damit.
Klammern um Bedingungen sind in Python nicht nötig und deswegen auch unüblich.
Statt zu zählen wie oft die gezogene Zahl in der Liste vorkommt, könntest Du auch einfach mit dem ``in``-Operator testen ob sie vorkommt.
`count` hat am Anfang jedes Schleifendurchlaufs der inneren ``while``-Schleife immer den gleichen Wert wie die Länge der Liste. Da braucht man also keine extra Variable für.
`string1` und `string2` sind schlechte Namen. Die sagen nichts darüber aus welche *Bedeutung* die Werte haben, die daran gebunden werden. *Das* ist aber das eigentlich Interessante für den Leser von Quelltext. Man sollte konkrete Typinformationen möglichst aus Namen heraushalten. Das gilt auch für den `list`-Zusatz bei `numberlist`. Wenn man irgendwann einmal entscheidet aus der Liste zum Beispiel ein `set` zu machen, dann muss man entweder die Namen überall ändern, oder man hat Namen die nicht mehr zum Programm passen.
`workspace` wird nicht verwendet. Weg damit.
Die Zeichenkette könnte man in einem `write()`-Aufruf schreiben wenn man sie mit Zeichenkettenformatierung zusammensetzt. Also mit dem ``%``-Operator oder der `format()`-Methode auf Zeichenketten. Dann würde man auch `string1` und `string2` los.
Alternativ könne man die Lottozahlen auch ermitteln indem man alle Zahlen mischt und dann die ersten 6 davon nimmt. Schau mal was es im `random`-Modul noch so an Funktionen gibt.
Wenn man vor Eintritt in eine Schleife schon weiss wie oft sie durchlaufen wird, ist eine ``for``-Schleife vorzuziehen.
`random.seed()` aufzurufen ist unnötig. Das wiederholte Aufrufen kann das Ergebnis sogar *weniger* zufällig machen, also weg damit.
Klammern um Bedingungen sind in Python nicht nötig und deswegen auch unüblich.
Statt zu zählen wie oft die gezogene Zahl in der Liste vorkommt, könntest Du auch einfach mit dem ``in``-Operator testen ob sie vorkommt.
`count` hat am Anfang jedes Schleifendurchlaufs der inneren ``while``-Schleife immer den gleichen Wert wie die Länge der Liste. Da braucht man also keine extra Variable für.
`string1` und `string2` sind schlechte Namen. Die sagen nichts darüber aus welche *Bedeutung* die Werte haben, die daran gebunden werden. *Das* ist aber das eigentlich Interessante für den Leser von Quelltext. Man sollte konkrete Typinformationen möglichst aus Namen heraushalten. Das gilt auch für den `list`-Zusatz bei `numberlist`. Wenn man irgendwann einmal entscheidet aus der Liste zum Beispiel ein `set` zu machen, dann muss man entweder die Namen überall ändern, oder man hat Namen die nicht mehr zum Programm passen.
`workspace` wird nicht verwendet. Weg damit.
Die Zeichenkette könnte man in einem `write()`-Aufruf schreiben wenn man sie mit Zeichenkettenformatierung zusammensetzt. Also mit dem ``%``-Operator oder der `format()`-Methode auf Zeichenketten. Dann würde man auch `string1` und `string2` los.
Alternativ könne man die Lottozahlen auch ermitteln indem man alle Zahlen mischt und dann die ersten 6 davon nimmt. Schau mal was es im `random`-Modul noch so an Funktionen gibt.
Noch ein Tipp:
Stefan
Code: Alles auswählen
with open("lottozahlen.txt", "a") as f:
print >>f, "Block %d: %s" % (x, numberlist)