[Python]Bombers Fragetread

Naja, ich habe mir die Verarbeitung so vorgestellt.
(jetzt mal im BSP mit 3 Ordnern, O1=140 Dateien, O2=120 Dateien, O3=20 Dateien. O1,2,3 liegen alle im Ordner X)
Jetzt wird Ordner X durchsucht.
Er findet O1. In diesem werden die ersten 100 Dateien umbenannt. Die Restlichen Dateipfade kommen in eine Liste. Nun ist er fertig mit O1 und geht wieder zurück zur Ausgangsfunktion. Er findet nun O2. Dort werden zuerst die 40 Dateien in der Liste in den Ordner verschoben, so dass hier nun 160 Dateien drin sind. Der Inhalt der Liste wird jetzt gelöscht, bzw. die Liste zurückgesetzt. Jetzt werden wieder die ersten 100 Dateien umbenannt und die anderen 60 kommen in die Liste. Nun gehts wieder zur Ausgangsfunktion zurück. O3 wird durchsucht. Die 60 Files werden wieder hier reinverschoben. Jetzt werden alle 80 Dateien hier umbenannt.
In O1,2,3 sind keine Unterordner.
 
Für so etwas brauchst du keine Rekursion. Du brauchst eine Hauptschleife, die die Ox Ordner durchläuft und eine innere Schleife, die durch die Dateien in einem Ox Ordner läuft (Genau genommen brauchst noch eine dritte, die die "überzähligen" Dateien aus dem vorigen Ordner verschiebt).
Ansonsten musst du es genau so runterprogrammieren, wie du es beschrieben hast.
 
Ich weiß, dass ich in diesem Fall keine Rekursion brauche. Ich würde trotzdem gern den Fehler finden, weil der Code eigentlich funktionieren müsste. Mir geht es mehr ums Programmieren, als ums fertige Programm. Wenn ich nur das will finde ich im Internet auch was.
 
Ach so. Ich kann zwar kein Python aber diese zwei Stellen solltest du mal prüfen:

1. Ich gehe mal davon aus, dass bei dem Funktionsaufruf eine Referenz auf das Array number übergeben wird. Alles andere würde nicht funktionieren, denn es soll ja durch den Rekursiven Aufruf gefüllt werden. In der Funktion schreibst du dann aber number=[], was für mich so aussieht, als ob ein neues Array erstellt wird und mit dem übergebenen Array nichts mehr zu tun hat (neue Referenz). Das neue Array "verschwindet" also, wenn du aus der Rekursion zurückkommst, das übergebene Array hat sich nicht geändert.

2. Ist der Slash am Ende von path+file_name+"/" vielleicht zu viel?
 
Darlis schrieb:
2. Ist der Slash am Ende von path+file_name+"/" vielleicht zu viel?

Das ist glaube ich in dem Thread schon mal gesagt worden, aber Pfadnamen sollten so wie so vorzugsweise mit os.path.join() zusammengefügt werden.
 
Also ich hab mir das mit dem path.join mal angeschaut, konnte mir aber nicht besonders viel daraus nehmen? Kann das jemand mit einem Beispiel zeigen?

Sorry, dass ich schon wieder auf dem Schlauch steh :(
 
Gut, ich denke ich habs jetzt soweit...


Nächstes Projekt (Fang ich an zu nerven? :) ):
Ein Vokabeltrainer.
Das heißt, ich möchte z.B. Vokabeln+jeweilige Übersetzung per Programm in eine .txt Datei ablegen. Mit einer anderen Funktion wird zufällig eine solche Vokabel ausgewählt, wozu dann die passende Übersetzung eingegeben werden muss. Das Prinzip sollte ja eigentlich einfach sein :)

Jetzt die 1. meiner vielen vielen Fragen:
Das Menü soll aus den Funktionen:

F1. Vokabeln testen
F2. Vokabeln eingeben
F3. Punktetest
F4. Exit

bestehen.

Beim Punktetest, werden 10 Vokabeln abgefragt und dann jeweils nach Fehlern die jeweilige Note errechnet, die es in der Schule wäre.

Ich möchte jetzt, dass ich nur z.B. F3 drücken muss um die Funktion aufzurufen. Also, es soll auf den Tastendruck reagieren.
Gibt es da eine Funktion in Python?
 
So, nächste Frage :)
hier ist der Quellcode:
Code:
def vocabulary():
	c = 0
	counter = ""
	zahlen = [0,1,2,3,4,5,6,7,8,9]
	eingabe = ""
	path = "C:/Dokumente und Einstellungen/Toni/Desktop/vocabulary/language/"
	while (eingabe != "F5"):
		print ("Funktionen:\n")
		print ("F1 - Sprache hinzufügen")
		print ("F2 - Vokabeln eingeben")
		print ("F3 - Punktetest")
		print ("F4 - freies Testen")
		print ("F5 - Exit")
		eingabe = input("Was soll getan werden?")
		if (eingabe=="F1"):
			language = input("Welche Sprache soll erstellt werden? ")
			language_file = path+language+".txt"
			open(language_file, "w")
			open(language_file, "w").close
		elif (eingabe=="F2"):
			[B]open(path+"Deutsch.txt", "r").read(counter)[/B]
			open(path+"Deutsch.txt", "r").close
			for symbol in counter:
				if (symbol in zahlen and c==0):
					count = symbol
					c = 1
				elif (symbol in zahlen and c==1):
					count = count + symbol
				else:
					c = 0
			count = int(count)
			count = count+1
			b = str(count)
			for lang_file in os.listdir(path):
				lang = os.path.splitext(lang_file)[0]
				word = b + input(lang + ": ")
				in_file = open(path+lang_file, "a")
				in_file.write(word)

Wenn ich das Programm jetzt ausführe, bekomme ich eine Fehlermeldung, das in der dick gedruckten Zeile ein INT element erwartet wird, aber ein STR Element gefunden wird.
Warum wird denn jetzt bitte schön ein INT erwartet? In der Datei steht bisher nur
 
read() erwartet ein Integer, also muss counter ein Integer sein. Es ist aber ein String, weil du es vorher mit "" initialisierst.

http://docs.python.org/library/stdtypes.html#file.read

Ich habe jetzt nicht den kompletten Code durchgelesen, aber ich vermute, dass du read (bzw. dessen Argument) falsch verwendest. read gibt einen String zurück und den nutzt du überhaupt nicht.
 
Zuletzt bearbeitet:
Ja, aber ich will ja, dass es ein String ist, ansonsten kann ich den Inhalt der datei ja schlecht auslesen, weil es nicht nur zahlen sind.

Okay, habs verstanden.
Gibt es keine Möglichkeit den Text als String auszulesen?
 
Zuletzt bearbeitet:
Aber dort steht auch wieder
To read a file’s contents, call f.read(size), which reads some quantity of data and returns it as a string
komplizierte sache...
 
Nicht kompliziert.

returns it as a string

Code:
mein_string = f.read(wieviel_soll_gelesen_werden)

Funktionen funktionieren genauso wie in Mathe:

y = f(x)

Die Funktion f erwartet x und gibt zurück y.

Die Funktion read erwartet einen Integer und gibt zurück einen String.
 
Zuletzt bearbeitet:
Sehr schön...
Nach einigen Schwierigkeiten funktioniert jetzt auch die Vokabeleingabefunktion.
Jetzt die nächste Frage:
Wie erzeuge ich eine Zufallszahl? Ich hab jetzt einfach "random.uniform(1, 10)" genommen, um eine Zahl zwischen 1 und 10 zu erstellen.
Gibts da noch eine bessere Möglichkeit, weil bei meinen Tests ungefähr 8 mal 9,xxxxx und andere sehr selten (1.xxx ; 2.xxx; 3.xxx gar nicht) rauskamen.

Edit:
Ich nehm jetzt einfach random.randint(1,10)
Das klappt bisher am besten :)
Ergänzung ()

Wie würdet ihr in Python eine Art "Suche" schreiben?

Also, ich habe 2 .txt Dateien.
Einmal Deutsch.txt und einmal Englisch.txt.
Dort ist solcher Text drin: 0Test1Affe2Huhn usw. (Deutsch.txt)
In der Englisch.txt siehts so aus: 0test1monkey2chicken usw.

Jetzt war meine Idee halt, ich könnte die passenden Vokabeln abfragen, in dem ich z.B. eine Zufallszahl generiere und diese Zahl dann in beiden .txt s suche und das folgende Wort bis zum Beginn der nächsten Zahl ist dann Variable Englisch , bzw. Variable Deutsch.

Wie würdet ihr das umsetzen?
Mein Weg ist ja ziemlich langwierig...
 
Zuletzt bearbeitet:
Würde so etwas nicht einfacher zu parsen sein?
Code:
0;Test
1;Affe
2;Huhn
Oder:
Code:
Test;test
Affe;monkey
Huhn;chicken
Sofern es bei zwei Sprachen bleibt.

Du kannst die Liste ja beim Programmstart einlesen (in eine HashMap oder Dictionary oder was Python so bietet) anstatt jedes mal die Datei zu durchsuchen.
 
Oh oh... da kommt ja wieder was auf mich zu :)...
2. Fragen:
1. Ich möchte die Vokabeln ja mit einer anderen Funktion in die Datei eingeben. Wie mache ich das jetzt, dass ich z.B.
0;Test
1;Affe
2;Huhn
in so eine Datei schreibe? Mir ist keine Funktion "writeline" o.ä. bekannt, mit der ich immer auf eine neue Zeile schreibe... ich kann doch eigentlich nur hintereinander schreiben.

2. Wie lade ich die Datei dann in z.B. ein Dictionary?


Auf Deutsch: Wie soll das gehen :(
 
Als angehender Programmierer solltest du schon in der Lage sein, diese recht trivialen Probleme selbst zu lösen. Ich kann kein Python und müsste selbst nach den entsprechenden Funktionen googeln.

Mit writeLine dürfte es wohl so in etwa aussehen:
Code:
for(int index = 0; index < germanList.length; index++) {
  output.writeline(index + ";" + germanList[index];
}
(das ist mehr Pseudocode als Python :P)
 
Das ist ansich auch kein Problem :)
Leider gibt es keine funktion write.line oä in Python...

Angehender Programmierer... So kann mans auch nennen, ich würde es eher "Schüler, der sich in seiner Freizeit irgendwelche Programme ausdenkt und dann ein Forum nervt, weil er selbst das nicht auf die Reihe bekommt" nennen ;)
 
Zurück
Oben