Python Problem

Tach
Ich hab eine Funktion in einem Pythonscript:

def array(achse, thema):{
 ok = 'ja'
 while ok == "ja":{
 print("Wollen sie auf der %s-Achse einen Key fuer %s einfuegen" %(achse, thema))
 ok = raw\_input()
 if ok == "ja":{
 a = int(raw\_input("In welchem Frame wollen sie den Key setzen: "))
 if thema == "Wind":{
 b = float(raw\_input("Wie schnell soll der Wind sein in Meter pro Sekunde: "))
 for a in range(a, frames+1):{
 achse[a] = b+gravitation}
 return achse
 }
 elif thema == "Beschleunigung":{
 b = float(raw\_input("Wie viel Meter pro Sekunde^2 soll zugefuehrt werden: "))}
 elif thema == "Kraft":{
 b = float(raw\_input("Wie viel Newton soll zugefuehrt werden: "))}
 for i in range(a, frames+1):{
 achse[i] = b}
 }
 return achse
}
}

Das Problem ist, dass ich eine Fehlermeldung kriege" ‚str‘ object does not support item assignment"

Ich glaube der Fehler ist, dass a ein string sei. Allerdings verstehe ich nicht, wieso.
Sorry, ich kann hier irgendwie keine Einrückungen aktivieren. Hoffe die Klammern stören nicht.
Danke für Hilfe
Apoth

_[MOD]:

-Tags hinzugefügt, bitte in Zukunft selbst machen._ 

Tach

Nabend

Das Problem ist, dass ich eine Fehlermeldung kriege" ‚str‘
object does not support item assignment"

Ich glaube der Fehler ist, dass a ein string sei. Allerdings
verstehe ich nicht, wieso.

Es wäre seeehr hilfreich, wenn du auch angäbest, für welche Zeile die Fehlermeldung kommt. Dann muss man nicht lange suchen. Zu wissen, von welchem Typ achse und thema sind, wäre auch nützlich, da der entscheidene Code fehlt.

Also, wenn achse eine String ist, dann verursacht achse[a] = die Fehlermeldung (BTW: das muss i lauten, wie weiter unten). Python-Strings sind unveränderlich, d.h. du musst einen neuen bauen. Aber dein Code soll sowieso wohl was völlig anderes machen. Mit achse[a] = b+gravitation würdest du das Zeichen am Index a durch eine Fließkommazahl ersetzen. Vermutlich willst du aber was völlig anderes.

Sorry, ich kann hier irgendwie keine Einrückungen aktivieren.
Hoffe die Klammern stören nicht.

Helfen tun sie nicht gerade. Nutze die pre-Tags, siehe Kasten unter dem Editfeld.

Jan

Tach

Nabend

Das Problem ist, dass ich eine Fehlermeldung kriege" ‚str‘
object does not support item assignment"

Ich glaube der Fehler ist, dass a ein string sei. Allerdings
verstehe ich nicht, wieso.

Es wäre seeehr hilfreich, wenn du auch angäbest, für
welche Zeile die Fehlermeldung kommt. Dann
muss man nicht lange suchen. Zu wissen, von welchem Typ achse
und thema sind, wäre auch nützlich, da der entscheidene Code
fehlt.

Fehler tritt immer dann auf wenn ich achse[a] mit etwas belegen will (mit b, respektive b+gravitation)
In der main rufe ich die methode auf, um ein Floatarray zu füllen. Die Variablen die ich mitgebe sind beides Strings, beide direkt eingegeben (also kraftx = array(„x“, „Kraft“)

Also, wenn achse eine String ist, dann verursacht
achse[a] = die Fehlermeldung (BTW: das
muss i lauten, wie weiter unten). Python-Strings sind
unveränderlich, d.h. du musst einen neuen bauen.

Heißt das, ich muss in Python alle For Schleifen mit i machen?

Aber dein
Code soll sowieso wohl was völlig anderes machen. Mit
achse[a] = b+gravitation würdest du das
Zeichen am Index a durch eine Fließkommazahl ersetzen.
Vermutlich willst du aber was völlig anderes.

Äh, doch da soll schon eine Float rein

Problem gelöst.
Hab versucht etwas als Array zurückzugeben was ursprünglich als String reinkam.
Man bin ich ein Dämlack.

Aber danke für die Hilfe
@mod
wird nicht mehr vorkommen sry

mfg
apoth

Hallo!

Fehler tritt immer dann auf wenn ich achse[a] mit etwas
belegen will (mit b, respektive b+gravitation)

Jetzt dämmert mir was. Der Bezeichner achse ist am Anfang ein String und soll am Ende der Funktion soll es eine Liste von Fließkommazahlen sein. Und zw. dem String-Inhalt (hier „x“) und dem Listeninhalt gibt es gar keinen Zusammenhang. Richtig? Also, nichts gegen Sparsamkeit, aber den Aufrufparameter würd ich besser einen eigenen Namen spendieren, vielleicht achsename oder achsenbezeichnung.

Das ändere mal und guck dir nochmal genau an, wie in Python Listen erzeugt werden. Denn die nächste Fehlermeldung bleibt natürlich nicht aus.

Jan

Hallo nochmal!

Hast du also noch entdeckt.

Noch eine Kleinigkeit: Du hast die Funktion array genannt. So heißt aber auch ein Standardmodul von Python. Da kann es leicht mal zu Kollisionen kommen.

Jan

Hallo

Problem gelöst.
Hab versucht etwas als Array zurückzugeben was ursprünglich
als String reinkam.
Man bin ich ein Dämlack.

Hehe, da hab ich seit langer langer Zeit wieder
mal Python angefaßt :wink: Wozu nimmt man denn
das noch?

Anmerkung: Du kannst die Kontrollstruktur (if/then/else)
völlig aus der Funktion herausnehmen, sie sähe dann
(Vorschlag) so aus:

def getArray(achse, bezeichnung, thema):
 msg = {
 'Input' : 'Auf der %s-Achse einen Key fuer %s einfuegen (ja/nein)',
 'Frame' : 'In welchem Frame wollen sie den Key setzen',
 }
 themen = {
 'Wind' : 'Wie schnell soll der Wind sein in Meter pro Sekunde',
 'Kraft' : 'Wie viel Newton soll zugefuehrt werden',
 'Beschleunigung' : 'Wie viel Meter pro Sekunde^2 soll zugefuehrt werden'
 }
 while themen.has\_key(thema):
 print msg['Input'] %(bezeichnung, thema)
 if raw\_input() == 'ja':
 startframe = int(raw\_input(msg['Frame'] + ': '))
 parameter = float(raw\_input(themen[thema] + ': '))
 zusatz = (0.0, gravitation)[thema == 'Wind']
 for i in range(startframe, frames+1): achse[i] = parameter + zusatz
 else:
 break
 return achse

Ich kenne ja den Kontext nicht, aber damit das
wie oben gedacht funktioniert, müßte dieser
etwa so:

gravitation = 9.81
SIZE = 100
achse = [0 for i in range(SIZE)]
frames = len(achse)-1
kraftx = getArray(achse, 'x', 'Wind')
print "kraftx: ", kraftx

aussehen. Naja, konnte ich wieder mal mit
Python herumspielen :wink:

Grüße

CMБ