Conditionals & Control Flow Announcements For This Lecture - - PowerPoint PPT Presentation

conditionals control flow announcements for this lecture
SMART_READER_LITE
LIVE PREVIEW

Conditionals & Control Flow Announcements For This Lecture - - PowerPoint PPT Presentation

Lecture 8 Conditionals & Control Flow Announcements For This Lecture Readings Assignment 1 Sections 5.1-5.7 today Due TONIGHT Chapter 4 for Tuesday Due before midnight Submit something Assignment 2 Can


slide-1
SLIDE 1

Conditionals & Control Flow

Lecture 8

slide-2
SLIDE 2

Announcements For This Lecture Readings

  • Sections 5.1-5.7 today
  • Chapter 4 for Tuesday
  • Posted Today

§ Written assignment § Do while revising A1

Assignment 1

  • Due TONIGHT

§ Due before midnight § Submit something… § Can resubmit to Sep. 28

  • Grades posted Saturday
  • Complete the Survey

§ Must answer individually

2 9/17/15 Conditionals & Control Flow

Assignment 2

slide-3
SLIDE 3

Testing last_name_first(n)

# test procedure def test_last_name_first(): """Test procedure for last_name_first(n)""" result = name.last_name_first('Walker White') cornelltest.assert_equals('White, Walker', result) result = name.last_name_first('Walker White') cornelltest.assert_equals('White, Walker', result) # Application code if __name__ == '__main__': test_last_name_first() print 'Module name is working correctly'

9/17/15 Conditionals & Control Flow 3

Call function

  • n test input

Compare to expected output Test code is properly formatted as script

slide-4
SLIDE 4

Types of Testing

Black Box Testing

  • Function is “opaque”

§ Test looks at what it does § Fruitful: what it returns § Procedure: what changes

  • Example: Unit tests
  • Problems:

§ Are the tests everything? § What caused the error?

White Box Testing

  • Function is “transparent”

§ Tests/debugging takes place inside of function § Focuses on where error is

  • Example: Use of print
  • Problems:

§ Much harder to do § Must remove when done

9/17/15 Conditionals & Control Flow 4

slide-5
SLIDE 5

Finding the Error

  • Unit tests cannot find the source of an error
  • Idea: “Visualize” the program with print statements

def last_name_first(n): """Returns: copy of <n> in form <last>, <first>""" end_first = n.find(' ') print end_first first = n[:end_first] print 'first is '+str(first) last = n[end_first+1:] print 'last is '+str(last) return last+', '+first

9/17/15 Conditionals & Control Flow 5

Print variable after each assignment Optional: Annotate value to make it easier to identify

slide-6
SLIDE 6

Structure vs. Flow

Program Structure

  • Way statements are presented

§ Order statements are listed § Inside/outside of a function § Will see other ways…

  • Indicate possibilities over

multiple executions

Program Flow

  • Order statements are executed

§ Not the same as structure § Some statements duplicated § Some statements are skipped

  • Indicates what really happens

in a single execution

9/17/15 Conditionals & Control Flow 6

Have already seen this difference with functions

slide-7
SLIDE 7

Structure vs. Flow: Example

Program Structure

def foo(): print 'Hello' # Script Code if __name__ == 'main': foo() foo() foo()

Program Flow

>>> python foo.py 'Hello' 'Hello' 'Hello'

9/17/15 Conditionals & Control Flow 7

Statement listed once Statement executed 3x Bugs can occur when we get a flow other than one that we where expecting

slide-8
SLIDE 8

Conditionals: If-Statements Format

if <boolean-expression>: <statement> … <statement>

Example

# Put x in z if it is positive if x > 0: z = x

9/17/15 Conditionals & Control Flow 8

Execution:

if <boolean-expression> is true, then execute all of the statements indented directly underneath (until first non-indented statement)

slide-9
SLIDE 9

Conditionals: If-Else-Statements Format

if <boolean-expression>: <statement> … else: <statement> …

Example

# Put max of x, y in z if x > y: z = x else: z = y

9/17/15 Conditionals & Control Flow 9

Execution:

if <boolean-expression> is true, then execute statements indented under if; otherwise execute the statements indented under elsec

slide-10
SLIDE 10

Conditionals: “Control Flow” Statements

if b : s1 # statement s3 if b : s1 else: s2 s3

9/17/15 Conditionals & Control Flow 10

s1 s3 s2 b s1 s3 b

Branch Point: Evaluate & Choose Statement: Execute

Flow

Program only takes one path each execution

slide-11
SLIDE 11

Program Flow and Call Frames

def max(x,y): """Returns: max of x, y""" # simple implementation 1 if x > y: 2 return x 3 return y

max(0,3):

9/17/15 Conditionals & Control Flow 11

max 1 x y 3

Frame sequence depends on flow

slide-12
SLIDE 12

Program Flow and Call Frames

def max(x,y): """Returns: max of x, y""" # simple implementation 1 if x > y: 2 return x 3 return y

max(0,3):

9/17/15 Conditionals & Control Flow 12

max 3 x y 3

Frame sequence depends on flow Skips line 2

slide-13
SLIDE 13

Program Flow and Call Frames

def max(x,y): """Returns: max of x, y""" # simple implementation 1 if x > y: 2 return x 3 return y

max(0,3):

9/17/15 Conditionals & Control Flow 13

max x y 3

Frame sequence depends on flow Skips line 2

RETURN

3

slide-14
SLIDE 14

Program Flow vs. Local Variables

def max(x,y): """Returns: max of x, y""" # swap x, y # put the larger in y 1 if x > y: 2 temp = x 3 x = y 4 y = temp 5 return y

  • temp is needed for swap

§ x = y loses value of x § “Scratch computation” § Primary role of local vars

  • max(3,0):

9/17/15 Conditionals & Control Flow 14

max 1 x 3 y

slide-15
SLIDE 15

Program Flow vs. Local Variables

def max(x,y): """Returns: max of x, y""" # swap x, y # put the larger in y 1 if x > y: 2 temp = x 3 x = y 4 y = temp 5 return y

  • temp is needed for swap

§ x = y loses value of x § “Scratch computation” § Primary role of local vars

  • max(3,0):

9/17/15 Conditionals & Control Flow 15

max 2 x 3 y

slide-16
SLIDE 16

Program Flow vs. Local Variables

def max(x,y): """Returns: max of x, y""" # swap x, y # put the larger in y 1 if x > y: 2 temp = x 3 x = y 4 y = temp 5 return y

  • temp is needed for swap

§ x = y loses value of x § “Scratch computation” § Primary role of local vars

  • max(3,0):

9/17/15 Conditionals & Control Flow 16

max 3 x 3 y temp 3

slide-17
SLIDE 17

Program Flow vs. Local Variables

def max(x,y): """Returns: max of x, y""" # swap x, y # put the larger in y 1 if x > y: 2 temp = x 3 x = y 4 y = temp 5 return y

  • temp is needed for swap

§ x = y loses value of x § “Scratch computation” § Primary role of local vars

  • max(3,0):

9/17/15 Conditionals & Control Flow 17

max 4 x y temp 3

slide-18
SLIDE 18

Program Flow vs. Local Variables

def max(x,y): """Returns: max of x, y""" # swap x, y # put the larger in y 1 if x > y: 2 temp = x 3 x = y 4 y = temp 5 return y

  • temp is needed for swap

§ x = y loses value of x § “Scratch computation” § Primary role of local vars

  • max(3,0):

9/17/15 Conditionals & Control Flow 18

max 5 x y 3 temp 3

slide-19
SLIDE 19

Program Flow vs. Local Variables

def max(x,y): """Returns: max of x, y""" # swap x, y # put the larger in y 1 if x > y: 2 temp = x 3 x = y 4 y = temp 5 return y

  • temp is needed for swap

§ x = y loses value of x § “Scratch computation” § Primary role of local vars

  • max(3,0):

9/17/15 Conditionals & Control Flow 19

max x y 3

RETURN

3 temp 3

slide-20
SLIDE 20

Program Flow vs. Local Variables

def max(x,y): """Returns: max of x, y""" # swap x, y # put the larger in y if x > y: temp = x x = y y = temp return temp

  • Value of max(3,0)?

9/17/15 Conditionals & Control Flow 20

A: 3 B: 0 C: Error! D: I do not know

slide-21
SLIDE 21

Program Flow vs. Local Variables

def max(x,y): """Returns: max of x, y""" # swap x, y # put the larger in y if x > y: temp = x x = y y = temp return temp

  • Value of max(3,0)?

9/17/15 Conditionals & Control Flow 21

A: 3 B: 0 C: Error! D: I do not know

CORRECT

  • Local variables last until

§ They are deleted or § End of the function

  • Even if defined inside if
slide-22
SLIDE 22

Program Flow vs. Local Variables

def max(x,y): """Returns: max of x, y""" # swap x, y # put the larger in y if x > y: temp = x x = y y = temp return temp

  • Value of max(0,3)?

9/17/15 Conditionals & Control Flow 22

A: 3 B: 0 C: Error! D: I do not know

slide-23
SLIDE 23

Program Flow vs. Local Variables

def max(x,y): """Returns: max of x, y""" # swap x, y # put the larger in y if x > y: temp = x x = y y = temp return temp

  • Value of max(0,3)?

9/17/15 Conditionals & Control Flow 23

A: 3 B: 0 C: Error! D: I do not know

CORRECT

  • Variable existence

depends on flow

  • Understanding flow

is important in testing

slide-24
SLIDE 24

Program Flow and Testing

  • Must understand which

flow caused the error

§ Unit test produces error § Visualization tools show the current flow for error

  • Visualization tools?

§ print statements § Advanced tools in IDEs (Integrated Dev. Environ.)

# Put max of x, y in z print 'before if' if x > y: print 'if x>y' z = x else: print 'else x>y' z = y print 'after if'

9/17/15 Conditionals & Control Flow 24

slide-25
SLIDE 25

Program Flow and Testing

  • Call these tools traces
  • No requirements on how

to implement your traces

§ Less print statements ok § Do not need to word them exactly like we do § Do what ever is easiest for you to see the flow

  • Example: flow.py

# Put max of x, y in z print 'before if' if x > y: print 'if x>y' z = x else: print 'else x<=y' z = y print 'after if'

9/17/15 Conditionals & Control Flow 25

Traces

slide-26
SLIDE 26

Watches vs. Traces

Watch

  • Visualization tool

(e.g. print statement)

  • Looks at variable value
  • Often after an assignment
  • What you did in lab

Trace

  • Visualization tool

(e.g. print statement)

  • Looks at program flow
  • Before/after any point

where flow can change

9/17/15 Conditionals & Control Flow 26

slide-27
SLIDE 27

Traces and Functions

def cycle_left(p): print 'Start cycle_left()' p.x = p.y print p.x p.y = p.z print p.y p.z = p.x print p.z print 'End cycle_left()'

9/17/15 Conditionals & Control Flow 27

Watches Traces

Example: flow.py

slide-28
SLIDE 28

Local Variables Revisited

  • Never refer to a variable

that might not exist

  • Variable “scope”

§ Block (indented group) where it was first assigned § Way to think of variables; not actually part of Python

  • Rule of Thumb: Limit

variable usage to its scope

9/17/15 Conditionals & Control Flow 28

def max(x,y): """Returns: max of x, y""" # swap x, y # put larger in temp if x > y: temp = x x = y y = temp return temp First assigned Outside scope

slide-29
SLIDE 29

Local Variables Revisited

  • Never refer to a variable

that might not exist

  • Variable “scope”

§ Block (indented group) where it was first assigned § Way to think of variables; not actually part of Python

  • Rule of Thumb: Limit

variable usage to its scope

9/17/15 Conditionals & Control Flow 29

def max(x,y): """Returns: max of x, y""" # swap x, y # put larger in temp temp = y if x > y: temp = x return temp First assigned Inside scope

slide-30
SLIDE 30

Variation on max

def max(x,y): """Returns: max of x, y""" if x > y: return x else: return y

9/17/15 Conditionals & Control Flow 30

There are two returns! But only one is executed

Which is better? Matter of preference

slide-31
SLIDE 31

Conditionals: If-Elif-Else-Statements Format

if <boolean-expression>: <statement> … elif <boolean-expression>: <statement> … … else: <statement> …

Example

# Put max of x, y, z in w if x > y and x > z: w = x elif y > z: w = y else: w = z

9/17/15 Conditionals & Control Flow 31

slide-32
SLIDE 32

Conditionals: If-Elif-Else-Statements Format

if <boolean-expression>: <statement> … elif <boolean-expression>: <statement> … … else: <statement> …

Notes on Use

9/17/15 Conditionals & Control Flow 32

  • No limit on number of elif

§ Can have as many as want § Must be between if, else

  • The else is always optional

§ if-elif by itself is fine

  • Booleans checked in order

§ Once it finds a true one, it skips over all the others § else means all are false

slide-33
SLIDE 33

Conditional Expressions

Format e1 if bexp else e2

  • e1 and e2 are any expression
  • bexp is a boolean expression
  • This is an expression!

Example # Put max of x, y in z z = x if x > y else y

9/17/15 Conditionals & Control Flow 33

expression, not statement