Ternary Operator in Python
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 26/07/2011 at 11:51, xxxxxxxx wrote:
Hey guys,
I can't seem to figure out the proper syntax python needs run ternary conditions.Here's an example that works in Coffee:
main(doc,op) { var distance = 1.5; // the larger the number the farther the travel var pos = op->GetAbsPos() ? vector(0,0,0) : vector(0,100,0) * distance; op->SetAbsPos(pos); }
I can't seem to get this same code to work in python:
import c4d def main() : distance = 1.5 # the larger the number the farther the travel pos = op.GetAbsPos() if c4d.Vector(0,0,0) else c4d.Vector(0,100,0) * distance op.SetAbsPos(pos) c4d.EventAdd() if __name__=='__main__': main()
What am I doing wrong?
-ScottA
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 26/07/2011 at 12:20, xxxxxxxx wrote:
See this thread on StackOverflow
Your example works for me.
Btw, what do you want to reach with that tenary conditiom ? It seems senseless to me.
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 26/07/2011 at 13:14, xxxxxxxx wrote:
I'm trying to toggle things with it.
The coffee example I posted toggles an object's Y position.I've looked at lots of examples. But I can only get a one way result in python.
Here's an example of it only working in one direction. Which is not what I want:import c4d from c4d import gui def main() : pos = op.GetAbsPos() if op.GetAbsPos==c4d.Vector(0,0,0) else c4d.Vector(0,100,0) op.SetAbsPos(pos) c4d.EventAdd() if __name__=='__main__': main()
I can't find any examples on how to use it as a toggle.
-ScottA
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 26/07/2011 at 13:57, xxxxxxxx wrote:
I don't understand what you are trying to achive.
(I'm also not quite sure if the coffee ternary conditiom has the same structure ?)a if b else c means Give a if b is True, if not, give c. and is the same as
if b: a else: c
Translating your code would mean the following:
Set 'pos' to op.GetAbsPos if Vector(0) is True, if not, set 'pos' to Vector(0,100,0) * distance.
Using a constant as 'b' is senseless. (Vector(0) is a constant) -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 26/07/2011 at 14:23, xxxxxxxx wrote:
I don't know how else to explain it.
My coffee example does what I want. I'm simply looking for the python version of it.-ScottA
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 26/07/2011 at 14:39, xxxxxxxx wrote:
condition ? value if True : value if False Is this right for the coffee version ? (cant test it)
I yes, you are doing it wrong in python.
value if True if condition else v alue if False -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 27/07/2011 at 09:26, xxxxxxxx wrote:
Hy Scott,
here is a solution:
import c4d def main() : distance = 1.5 # the larger the number the farther the travel pos = c4d.Vector(0,100,0) * distance if (op.GetAbsPos() == c4d.Vector(0,0,0)) else c4d.Vector(0,0,0) op.SetAbsPos(pos) c4d.EventAdd() if __name__=='__main__': main()
The reason for your confusion comes from the fact, that COFFEE has some "additional" information when it comes to comparisons. In the ternary operator you ask COFFEE to compare a vector to the state "is defined". COFFEE *knows... actually, a strange assumption* that only a zero-vector is (seen as) undefined. So the question for COFFEE is:
op->GetAbsPos() is defined ?
This will return 0 only for the zero-vector. That is the reason why it worked so far in COFFEE. In Python, this does not make sense. Python will just look if the variable if the condition is not 0 or None (ie. defined, which it always is, when given a vector).
Cheers,
maxxEdit: explanation wasn't that accurate, up to date ...
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 27/07/2011 at 10:34, xxxxxxxx wrote:
Thanks a lot Maxx.
That's exactly what I was searching for.-ScottA