"James" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > Wrong syntax is shown below. What should be the delimiter before else? > > python -c 'if 1==1: print "yes"; else print "no"' > > James >
So you can approximate this same logic with a boolean expression: print (1==1 and "yes" or "no") This is because Python short-circuits boolean and's and or's, and returns the last evaluated value. So the expanded logic here is: evaluate 1==1 -> True evaluate "yes" -> True - we are done, return "yes" if the expression were (math.pi==3 and "yes" or "no"), we would get: evaluate math.pi==3 -> False (skip evaluation of "yes", first part failed so go straight to or term) evaluate "no" -> well, doesn't matter if this is True or False, it's the last thing we have to evaluate, return it Generally this gets idiomatically expressed as: (condition and trueConditionValue or falseConditionValue) This is currently (Python 2.4) the closest Python gets to C's ternary operator. Note that there are some risks, for example, this rendition *wont* work. numberOfApples = 1 print "I have %d apple%s" % ( numberOfApples, (numberOfApples ==1 and "" or "s")) This is because "" evaluates boolean-ly to False, so the conditional conjunction of (numberOfApples==1) and "" is False, so we continue to evaluate the expression, and wind up printing "I have 1 apples". The resolution is to invert the test: numberOfApples = 1 print "I have %d apple%s" % ( numberOfApples, (numberOfApples !=1 and "s" or "")) (If I have zero of something, I prefer to say "I have 0 somethings" - if you like to say "I have 0 something" then make the test read (numberOfApples > 1 and "s" or "") ) In the coming 2.5 version of Python, there is a ternary-like expression: numberOfApples = 1 print "I have %d apple%s" % ( numberOfApples, ("" if numberOfApples ==1 else "s")) Python 2.5 is still in preliminary releases though, and will not be generally available until this coming fall. This will allow you to spell out if-then-else conditions on the command line. In general scripting, though, compaction of code into one-liners is not always considered a virtue. This code: print "I have %s apple%s" % (numberOfApples==0 and "no" or numberOfApples, numberOfApples !=1 and "s" or "") will not win you points with your software maintenance team. -- Paul -- http://mail.python.org/mailman/listinfo/python-list