Seite 1 von 1
string vergleichen für if/else
Verfasst: Donnerstag 20. September 2012, 11:28
von kornyclown
Hallo liebes Python Forum,
ich bin grade dabei mein erstes "wirkliches" Tool zu schreiben (kein Hello World oder Währungsrechner).
Es geht in meinem Beispiel um die Software Maya (3D Applikation wer's nicht kennt) und ich möchte ein Tool mit Python schreiben, welches in diese Software implementiert ist.
Ich muss verschiedene Nodes auf ihre Classification überprüfen, das tue ich mit
Code: Alles auswählen
import maya.cmds as mc
classi = mc.getClassification("irgendEineNode")
So damit habe ich das ganze in der Variablen classi gespeichert.
Wie wir hier sehen:
http://download.autodesk.com/us/maya/20 ... ation.html
kriege ich von dieser Funktion einen/mehrere Strings der Classification zurück oder ein leeres Array wenn keine Classification vorliegt.
Beispiel:
Code: Alles auswählen
classi = mc.getClassification('lambert')
for c in classi[:]:
print "output: " + c
output: shader/surface
Wenn ich jetzt aber diesen Wert in classi nutzen will für eine if/else Anweisung was muss ich denn genau machen weil
funktioniert nicht
Re: string vergleichen für if/else
Verfasst: Donnerstag 20. September 2012, 11:36
von webspider
Die Rückgabe ist anscheinend etwas iterierbares, da du ja versuchst alle seine Elemente auszugeben. D.h. der Ausgabe nach wird es wohl kein String sein und der Vergleich deswegen scheitern. Du bist wahrscheinlich daran interessiert zu schauen ob die Rückgabe den einen String als Element beinhält, nicht ob sie einer ist. Sollte es Fehlermeldungen geben, gewöhn es dir an diese auch zu posten, denn das hilft uns mehr als ein "funktioniert nicht".
Re: string vergleichen für if/else
Verfasst: Donnerstag 20. September 2012, 13:13
von JonasR
Mal ne kurze Frage
Der Doppelpunkt in den eckigen Klammer macht eigentlich nichts sinnvolles und könnte auch weggelassen werden oder nicht?
Re: string vergleichen für if/else
Verfasst: Donnerstag 20. September 2012, 13:14
von kornyclown
Ja, ich möchte überprüfen ob der String den ich von der Funktion zurück bekomme und zum Beispiel der String "shader/surface" die gleichen Strings sind.
So wie ich das verstehe würde also
nur den Datentyp prüfen und das gibt false weil classi ne Liste ist und "shader/surface" ein String, richtig?
Aber wie prüfe ich denn dann auf Gleichheit des Strings?
Hier nochmal mein falsches Beispiel (es gibt keine Fehlermeldung, es passiert einfach nichts):
Code: Alles auswählen
import maya.cmds as mc
classi = mc.getClassification('lambert')
if classi == "shader/surface":
print "bla"
Re: string vergleichen für if/else
Verfasst: Donnerstag 20. September 2012, 13:16
von kornyclown
JonasR hat geschrieben:Mal ne kurze Frage
Der Doppelpunkt in den eckigen Klammer macht eigentlich nichts sinnvolles und könnte auch weggelassen werden oder nicht?
Hm, ich habs so aus den Examples der Dokumentation kopiert
Code: Alles auswählen
classifications = cmds.getClassification('lambert')
for c in classifications[:]:
print '\tClassified as ' + c + '\n'
Re: string vergleichen für if/else
Verfasst: Donnerstag 20. September 2012, 13:20
von JonasR
@korny Deine Vermutung ist falsch, es wird nicht der Datentyp überprüft.
Stell dir einfach mal den Inhalt von classi vor, der dürfte ungefähr so aussehen:
Wenn du das nun mit dem string auf Gleichheit prüfst also
Wirst du schon beim einfachen hinsehen merken das diese beiden Objekte nicht gleich sind.
Du solltest dich vielleicht nochmal mit listen beschäftigen.
Edit:
Jo ich habe mir die Doku angesehen, ändert aber nichts da dran das es meiner Meinung nach unnötig ist

Re: string vergleichen für if/else
Verfasst: Donnerstag 20. September 2012, 14:57
von kornyclown
Ah, ok
würde ich dann hiermit mehr Erfolg haben:
Re: string vergleichen für if/else
Verfasst: Donnerstag 20. September 2012, 15:24
von JonasR
Denke schon, müsstest du einfach mal testen

Kannst dir ja auch mal die ganze liste ausgeben lassen

Übrigens solltest du noch prüfen ob classi überhaupt Elemente enthält, denn wenn die liste leer ist und du mit [0] auf das erste Element zugreift bekommst eine Exception.
Edit:
Besser ist es natürlich wenn du
machst aber wie gesagt lese dich am besten mal in listen ein
