for-Schleife erstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Kareem85
User
Beiträge: 12
Registriert: Montag 7. Juli 2008, 13:57

Hi Leute,

mein name ist Karim und ich bin neu in der Python-Szene^^

Ich möchte gerne eine for-Schleife erzeugen. Für euch wahrscheinlich das einfachste auf der Welt^^ Für mich jedoch Verzweiflung Pur!

Es geht um einem Punkt im 3D-Koordinatensystem mit den Komponenten x,y,z

Diese Komponenten will ich (x/y um je 3, z um je 2) Werte nach links und rechts in 1er Schritten ausgeben lassen.

zB

x= 10
y=20
z=30

dann soll er mit x bei 7 anfangen und bis 13 gehen
und für y und z das selbe spielchen.

zudem soll er aber auch die, ich nenn sie jetzt mal, zusätzlichen stationen aufrufen. also das x,y, und z gleichzeitig verändert sind! ich hoffe ich konnte das irgendwie erklären.

also so:

1. x=10 y=20 z=30
2. x=7 y=20 z=30
3. x=8 y=20 z=30
...
...bis
...
q. x=13 y=20 z=30

dann soll sich y auf den nächsten wert bewegen

q. x=10 y=17 z=30
q. x=7 y=17 z=30
q. x=8 y=17 z=30


usw.

also sprich, jede kombination aus x,y und z will ich ausgeben wobei sich, wie oben beschrieben x und y um 3 und z sich um 2 verändert.

Ich hoffe ihr könnt mir schnellstmöglich helfen.

Mit freundlichen Grüßen

Kareem
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Hallo Karim, willkommen im Forum!

Welche Vorkenntnisse an Programmierung - in Python und sonst - bringst du denn mit?

Könntest du dein Problem in irgendeiner anderen Sprache lösen? Wie sähe es da aus? Schreib doch mal etwas Pseudocode oder Code in einer dir vertrauten Sprache. Das Übertragen nach Python wird dann nicht so schwer sein.
Kareem85
User
Beiträge: 12
Registriert: Montag 7. Juli 2008, 13:57

ja also das sind meine ersten programmierungen in python.
vorher habe ich mal java gelernt.

nunja bisher versuche ich das immer so zu lösen:

Code: Alles auswählen


caseId= 0

a = -3
b = 3

x = 130.499998435961   
y = 123.500000337196
z = 6.50000025180586

x= x+a

while a <= b:
        caseId = caseId + 1
        idString =  "%04d" % (caseId,)
        posString = str(xt3) + " "  + str(yt3) + " " + str(zt3)
        caseString = ...
        % (idString, idString, posString)
        myfile.write(caseString)

        x=x+1
        a = a+1

und da musste ich die zahlen immer so eingeben, und es konnte mir auch nicht die zusätzlichen Sachen ausgeben.

die werte will ich nachher in ein xml schreiben. da sind meine befehle nach caseString=...

gibt es auch eine möglichkeit, werte aus einem xml rauszuholen? Sodass ich die manuelle Eingabe umgehen kann?

Und zur Frage mit der anderen Sprache und dem übertragen wüsste ich leider auch nicht, wie ich das in Java schreiben würde! Ich bin totaler anfänger und habe bisher nur ganz einfache sachen gemacht
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Kareem85 hat geschrieben:Ich bin totaler anfänger und habe bisher nur ganz einfache sachen gemacht
Das macht weiter ja nichts - so ging es jedem irgendwann mal.

Dann wäre es m.E. aber sinnvoll, wenn du dir zunächst einmal Zeit nimmst, ein anständiges Tutorial mit den darin befindlichen Beispielen in Ruhe durchzuarbeiten. Das offizielle Tutorial ist da sehr zu empfehlen.

Falls du im Englischen fit bist, am besten im Original:
http://docs.python.org/tut/tut.html

Ansonsten geht auch eine etwas ältere, aber dafür deutsche Fassung:
http://starship.python.net/crew/gherman ... nline/tut/
Kareem85
User
Beiträge: 12
Registriert: Montag 7. Juli 2008, 13:57

okay ich lese mir das mal mit den forschleifen durch und probiere es nochmal!
aber kannst du oder jemand anderes mir sagen, wie man werte aus einem xml raulesen kann?
Kareem85
User
Beiträge: 12
Registriert: Montag 7. Juli 2008, 13:57

Sorry aber ich stehe mal wieder auf dem Schlauch!

ich weiss ja nichtmal wie die Syntax, geschweige denn die Umsetzung dazu aussehen müsste :(

hat mir denn keiner eine schnelle und einfache lösung die auch ich verstehe?
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Überleg doch mal:
Kareem85 hat geschrieben:ich weiss ja nichtmal wie die Syntax, geschweige denn die Umsetzung dazu aussehen müsste Sad

hat mir denn keiner eine schnelle und einfache lösung die auch ich verstehe?
Es soll schnell gehen und einfach sein. Du verstehst aber nach eigener Aussage wenig vom Programmieren. Wie soll das gehen?

Vermutlich könnte manch einer hier dir den fertigen Code posten, macht wahrscheinlich aber keiner. DU musst vorne anfangen: Lesen, lesen, lesen, experimentieren, experimentieren, experimentieren, dadurch dann viele Aha-Erlebnisse haben und schließlich kannst du dein Programm dann selbst schreiben. Aber SCHNELL und EINFACH wird das nicht gehen.

zu XML:
Kareem85
User
Beiträge: 12
Registriert: Montag 7. Juli 2008, 13:57

ich erwarte ja nicht, dass mir einer den fertigen code zusenden soll aber einen kleinen ruck in die richtige richtung wäre jetzt grade eine erlösung aus meinen qualen

zudem fehlt mir diese zeit! ich kann nicht 2 wochen lesen wenn ich in einer kürzeren zeit das erledigt haben soll :(
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

mal vielleicht so als Denkanstoss fuer ne ganz einfache Variante. Schau Dir einfach mal folgende Syntax an:

Code: Alles auswählen

xpos = 10

for x in range(xpos - 3, xpos + 3 + 1, 3):
    print x,
aus der Grundidee solltest Du doch zumindest was basteln koennen, indem man das jetzt halt mit mehreren Schleifen verschachtelt.
Kareem85
User
Beiträge: 12
Registriert: Montag 7. Juli 2008, 13:57

hi danke für den anstoss aber irgendwie will das bei mir nicht gehen! und dabei habe ich den selben syntax benutzt wie du!

der gibt mir nur das "xpos" an
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

na als Output kann da nicht nur xpos rauskommen sondern eben die drei Werte 7, 10, 13

Das sollte Dir einfach zeigen wie so ne normale Schleife aussehen kann. Dass das jetzt nur der x-Wert war ist klar und war beabsichtigt, denn die anderen sollst Du ja da selbst einbauen.

Eines noch: Du willst ja nicht nur die drei Werte haben sondern alle Werte dazwischen auch. Also musst Du in der Range-Klammer den letzten Wert, der die Schrittweite angibt, nicht 3 sondern 1 nehmen und schon hast Du alle gewuenschten x-Werte.
Kareem85
User
Beiträge: 12
Registriert: Montag 7. Juli 2008, 13:57

dass war mir klar, dass das nur der x wert sein soll und mit den schritten habe ich mir das auch gedacht! aber wenn der mir immer nur den x wert gibt ohne das zu verändern dann wundert mich das schon!
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

wo gibt wer was aus und was ist daran dann falsch? Du drueckst Dich leider sehr unklar aus. Zeig doch mal was Du genau hast und machst und was dabei rauskommt. Bei dem was ich Dir da geschrieben habe kommt ja nicht nur ein Wert raus sondern mehrere, naemlich alle von Dir gewuenschten X-Werte.
Kareem85
User
Beiträge: 12
Registriert: Montag 7. Juli 2008, 13:57

also ich schreib mal den code rein weil ich grade garnichtmehr weiss was läuft!
Zuletzt geändert von Kareem85 am Montag 7. Juli 2008, 16:46, insgesamt 1-mal geändert.
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

ok, mit Float-Werten als Koordinaten funktioniert das mit der range-Geschichte natuerlich nicht, da range nur Integers nimmt. Da musst Du dann vermutlich anders arbeiten. Mir ist aber noch nicht so ganz klar was Du eigentlich willst bzw. wo es klemmt. Das Codestueck das Du da zeigst ist ja nicht vollstaendig.

Fang doch erstmal an, nur die Schleifen zu bauen und mit print die Ergebniswerte auszugeben, ohne gleich was in ein File schreiben zu wollen. Erst wenn das klappt und die richtigen Werte rauskommen wuerde ich weitermachen mit ner anderen Ausgabe.
Kareem85
User
Beiträge: 12
Registriert: Montag 7. Juli 2008, 13:57

eine freundin hat mir geholfen!

Code: Alles auswählen

    for i in range (- 2, 2,1):
        zt1_neu= zt1+i
        for j in range (-3, 3, 1):
                yt1_neu=yt1+j
                for k in range (-3, 3, 1):
                        xt1_neu= xt1+k
das hat gefehlt...

trotzdem danke
Antworten