4-2 If-statements: basic form An if-statement enables a program to choose between alternative courses of action. The basic form of if-statement is: if expression : body 1 else: body 0 a sequence of statements To execute this if-statement: 1. Evaluate expression to either True or False. 2. If the result was True, execute body 1. 3. If the result was False, execute body 0.
4-3 Example: maximum of two numbers If max were not a built-in function, we could define it ourselves: def max (x, y): # Return the greater of the numbers x and y. if x > y: return x else: return y
4-4 If-statements: form without else Sometimes one of the alternatives of an if- statement is to do nothing. We can omit the else part: if expression : body To execute this if-statement: 1. Evaluate expression to either True or False. 2. If the result was True, execute body 1. 3. If the result was False, do nothing.
4-5 Example: sorting two numbers The following program takes two numbers in x and y, and sorts them so that the smaller number is in x and the larger in y : x = input('Enter a number: ') y = input('Enter another number: ') if x > y: # Swap the numbers in x and y … z = x x = y y = x print 'Sorted numbers:', x, y
4-6 If-statements: extended form (1) Sometimes an if-statement has three (or more) alternatives. We can use an extended form of if-statement: if expression 1 : body 1 elif expression 2 : body 2 else: body 0 may be replicated as often as you need may be omitted
4-7 If-statements: extended form (2) This is equivalent to: if expression 1 : body 1 else: if expression 2 : body 2 else: body 0
4-8 Example: roots of quadratic equation (1) Consider the general quadratic equation: ax 2 + bx + c = 0 Its roots are given by: ( ‒ b ± √(b 2 – 4ac)) / (2a) But note that: –there are two real roots if b 2 – 4ac > 0 –there is only one real root if b 2 – 4ac = 0 –there are no real roots if b 2 – 4ac < 0.
4-9 Example: roots of quadratic equation (2) Function: def roots (a, b, c): # Return the real root(s) of the quadratic equation # a x 2 + b x + c = 0, or ( ) if it has no real roots. d = b**2 – 4*a*c if d > 0: s = square_root(d) r1 = (-b+s)/(2*a) r2 = (-b-s)/(2*a) return (r1, r2) elif d == 0: return –b/(2*a) else: return ()
4-11 Example: roots of quadratic equation (4) Tracing the function call roots(1.0, 2.0, 1.0) : abc Enter the function: 1.02.01.0 Execute “ d = b**2 - … ”: 1.02.01.0 d 0.0 Test “ d > 0 ”: yields False 1.02.01.00.0 Test “ d == 0 ”: yields True 1.02.01.00.0 Execute “ return –b/(2*a) ”: returns ‒ 1.0 1.02.01.00.0
4-12 Testing non-boolean values Uniquely, Python allows a value of any type to be tested in an if-statement (or while-statement). TypeValue treated as False Values treated as True integer0non-zero integers floating-point0.0non-zero numbers string‘’ (empty string)non-empty strings listempty listnon-empty lists dictionaryempty dictionarynon-empty dict’s
4-13 Example: testing strings Here is part of a simple command-line program. It accepts commands “duck” and “dive”, and rejects an invalid command. com = raw_input('Command? ') if com == 'duck': duck() elif com == 'dive': dive() elif com: print '- invalid command!' This assumes that functions duck and dive actually execute the respective commands. alternatively, elif com != '':
4-14 Conditional expressions A conditional expression evaluates its result in one of two alternative ways, depending on a boolean. It has the form: expression 1 if expression 0 else expression 2 To evaluate this conditional expression: 1. Evaluate expression 0 to either True or False. 2. If the result was True, evaluate expression 1. 3. If the result was False, evaluate expression 2.
4-15 Example: conditional expression (1) Here are shorter implementations of the abs and max functions: def abs (x): # Return the absolute value of the number x. return (x if x >= 0 else -x) def max (x, y): # Return the greater of the numbers x and y. return (x if x > y else y) It is good practice to parenthesise this form of expression.
4-16 Boolean operators revisited Consider an expression of the form “A and B”. –A is evaluated first. If it yields False, the overall result must be False, so B is not evaluated at all. –Thus “A and B” is equivalent to “B if A else False ”. Similarly, consider an expression of the form “A or B”. –A is evaluated first. If it yields True, the overall result must be True, so B is not evaluated at all. –Thus “A or B” is equivalent to “ True if A else B”.
4-17 Short-circuit evaluation The boolean operators “ and ” and “ or ” each uses short-circuit evaluation. The right operand is evaluated only if it can affect the overall result. No other Python operator uses short-circuit evaluation. The left and right operands are both evaluated.
4-18 Example: short-circuit evaluation (1) This function tests whether a student is qualified to graduate with an ordinary degree: def qualified (credits, grade_points): # Return True if the student has at least 360 credits # and a grade-point average of at least 9.0. return credits >= 360 and grade_points/credits >= 9.0 If the student has 0 credits, this function correctly returns False. Short-circuit evaluation is essential here, otherwise the function would fail (division by 0).
4-19 Example: short-circuit evaluation (2) This function uses a conditional expression to give the same result: def qualified (credits, grade_points): # Return True if the student has at least 360 credits # and a grade-point average of at least 9.0. return (grade_points/credits >= 9.0 \ if credits >= 360 \ else False)