38
Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan, White]

Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

  • Upload
    others

  • View
    13

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Conditionals &Control Flow

Lecture 8

CS 1110: Introduction to Computing Using Python

[Andersen, Gries, Lee, Marschner, Van Loan, White]

Page 2: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Announcements: Assignment 1

• Due tonight at 11:59pm. Suggested early submit deadline of 2pm.

• Set CMS notifications to receive automatic emails when a grade is changed.

• First round of feedback should be out by Monday.• If your A1 is not perfect, your first grade will be a 1. This is a counter for how many times you have submitted. It is not a permanent grade, can resubmit until March 2nd.

• Read section 2.3 of A1 carefully to understand how you can revise.

2/13/17 Conditionals & Control Flow 2

Page 3: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Announcements

• Please do not post code to Piazza1

• Review the announcements from the end of Lecture 6 for policies:

http://www.cs.cornell.edu/courses/cs1110/2017sp/lectures/02-14-17/presentation-06.pdf

1actually violating academic integrity rules because you are showing code to others

2/13/17 Conditionals & Control Flow 3

Page 4: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Methods: Functions Tied to Classes

• Method: function tied to class Method call looks like a function

call preceded by a variable name:⟨variable⟩.⟨method⟩(⟨arguments⟩)

Example: p.distanceTo(q)

• Just like we saw for strings s = 'abracadabra' s.index('a')

• Are strings objects?

id3

x 5.0

y 2.0

z 3.0

id3p

Point3

Actually, yes.

2/13/17 Conditionals & Control Flow 4

Page 5: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Name Resolution

• ⟨object⟩.⟨name⟩ means Go the folder for object

Look for attribute/method name

If missing, check class folder

• Class folder is a shared folder Only one for the whole class

Shared by all objects of class

Stores common features

Typically where methods are

id3

x 5.0y 2.0z 3.0

id3p

Point3

x, y, zdistanceTo(other)abs()

Point3

id4

x 7.4y 0.0z 0.0

id4q

Point3

2/13/17 Conditionals & Control Flow 5

Page 6: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Structure vs. Flow

Program Structure

• Order in which statements are written in scripts and modules

• Not necessarily the order in which Python executes them

Control Flow

• Order in which statements are actually executed at runtime Statements may be:

• skipped• executed more than once

Have already seen this difference with functions

2/13/17 Conditionals & Control Flow 6

Page 7: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Structure vs. Flow: Example

Program Structure

def foo():print 'Hello'

# Script Codefoo()foo()foo()

Control Flow

C:\> python foo.py'Hello''Hello''Hello'

2/13/17 Conditionals & Control Flow 7

This statement listed only once

Statement executed 3 times

Page 8: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Conditionals: If-Statements

Formatif <boolean-expression>:

<statement>…<statement>

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

z = x

2/13/17 Conditionals & Control Flow 8

Execution:

if ⟨Boolean-expression⟩ is true, then execute all of the statements

indented directly underneath (until first non-indented statement)

Page 9: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

What gets printed?

a = 0

print a

2/13/17 Conditionals & Control Flow 9

prints 0

Page 10: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

What gets printed?

a = 0a = a + 1

print a

2/13/17 Conditionals & Control Flow 10

prints 1

Page 11: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

What gets printed?

a = 0if a == 0:

a = a + 1

print a

2/13/17 Conditionals & Control Flow 11

prints 1

Page 12: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

What gets printed?

a = 0if a == 1:

a = a + 1

print a

2/13/17 Conditionals & Control Flow 12

prints 0

Page 13: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

What gets printed?

a = 0if a == 1:

a = a + 1a = a + 1

print a

2/13/17 Conditionals & Control Flow 13

prints 1

Page 14: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

What gets printed?

a = 0if a == 0:

a = a + 1a = a + 1

print a

2/13/17 Conditionals & Control Flow 14

prints 2

Page 15: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

What gets printed?

a = 0if a == 0:

a = a + 1if a == 0:

a = a + 1a = a + 1

print a

2/13/17 Conditionals & Control Flow 15

A: 0B: 1C: 2D: 3E: I do not know

CORRECT

Executed

Executed

Skipped

Executed

Page 16: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Conditionals: If-Else-Statements

Formatif <boolean-expression>:

<statement>…

else:<statement>…

Example# Put max of x and y in zif x > y:

z = xelse:

z = y

2/13/17 Conditionals & Control Flow 16

Execution:

if ⟨Boolean-expression⟩ is true, then execute statements indented

under if; otherwise execute the statements indented under else

Page 17: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Conditionals: “Control Flow” Statements

if b :

s1 # statement

s3

if b :s1

else:s2

s32/13/17 Conditionals & Control Flow 17

s1

s3

s2

b

s1

s3

b Branch Point:Evaluate & Choose

Statement: Execute

FlowProgram only takes one path each execution

True

False

TrueFalse

Page 18: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

What gets printed?

a = 0if a == 0:

a = a + 1else:

a = a + 1

print a

2/13/17 Conditionals & Control Flow 18

prints 1

Page 19: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

What gets printed?

a = 0if a == 1:

a = a + 1else:

a = a + 1

print a

2/13/17 Conditionals & Control Flow 19

prints 1

Page 20: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

What gets printed?

a = 0if a == 1:

a = a + 1else:

a = a + 1a = a + 1print a

2/13/17 Conditionals & Control Flow 20

prints 2

Page 21: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

What gets printed?

a = 0if a == 1:

a = a + 1else:

a = a + 1a = a + 1

a = a + 1print a

2/13/17 Conditionals & Control Flow 21

prints 3

Page 22: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Program Flow and Call Frames

• if can change which statement is executed next

2/13/17 Conditionals & Control Flow 22

foo 1def foo(a):1 if a == 0:2 print “hi”3 print “bye”

foo(0)

a 0

a 0

foo 2

Page 23: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Program Flow and Call Frames

• if can change which statement is executed next

2/13/17 Conditionals & Control Flow 23

foo 1def foo(a):1 if a == 0:2 print “hi”3 print “bye”

foo(1)

a 1

a 1

foo 3

Page 24: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Program Flow and Call Frames

def max(x,y):1 if x > y:2 return x

3 return y

max(0,3):

2/13/17 Conditionals & Control Flow 24

max 1

x 0

y 3

Page 25: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

What happens next?

2/13/17 Conditionals & Control Flow 25

max 1

x 0

y 3

C: maxx 0

y 3

RETURN 3

D: max 3x 0

y 3

B: maxx 0

y 3

RETURN 0

A: max 2x 0

y 3

Current call frame:

def max(x,y):1 if x > y:2 return x

3 return y

Page 26: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Program Flow and Call Frames

max(0,3):

2/13/17 Conditionals & Control Flow 26

max 3

x 0

y 3

Skips line 2

def max(x,y):1 if x > y:2 return x

3 return y

Page 27: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Program Flow and Call Frames

max(0,3):

2/13/17 Conditionals & Control Flow 27

max

x 0

y 3

Skips line 2

RETURN

3

def max(x,y):1 if x > y:2 return x

3 return y

Page 28: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Program Flow and Variables

• Variables continue to exist outside of if

• Also continue to exist even if created in if

2/13/17 Conditionals & Control Flow 28

a = 0if a == 0:

a = a + 1print a

Page 29: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Program Flow and Variables

a = 0if a == 0:

b = 0print b

2/13/17 Conditionals & Control Flow 29

prints 0

Page 30: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Program Flow and Variables

a = 0if a == 1:

b = 0print b

2/13/17 Conditionals & Control Flow 30

Error!

Page 31: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Program Flow and Variables

def zero_or_one(b):if b:

a = 0else:

a = 1print a

2/13/17 Conditionals & Control Flow 31

better make sure that ALL ifbranches create the variable

Page 32: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Program Flow and Testing

• Can use print statements to examine program flow

'before if''if x>y‘'after if'

# Put max of x, y in zprint 'before if'if x > y:

print 'if x>y'z = x

else:print 'else x<=y'z = y

print 'after if'

Traces

x must have been greater than y

2/13/17 Conditionals & Control Flow 32

Page 33: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Conditionals: If-Elif-Else-Statements

Formatif <Boolean expression>:

<statement>…

elif <Boolean expression>: <statement>…

…else:

<statement>…

Example

# Put max of x, y, z in wif x > y and x > z:

w = xelif y > z:

w = yelse:

w = z

2/13/17 Conditionals & Control Flow 33

Page 34: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Conditionals: If-Elif-Else-Statements

Formatif <Boolean expression>:

<statement>…

elif <Boolean expression>: <statement>…

…else:

<statement>…

Notes on Use

2/13/17 Conditionals & Control Flow 34

• No limit on number of elif Must be between if, else

• else is optional if-elif by itself is fine

• Booleans checked in order Once Python finds a true

<Boolean-expression>, skips over all the others

else means all are false

Page 35: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

If-Elif-Else

a = 2

if a == 2:a = 3

elif a == 3:a = 4

print a

2/13/17 Conditionals & Control Flow 35

A: 2B: 3C: 4D: I do not know

What gets printed?

CORRECT

Page 36: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

If-Elif-Else

a = 2

if a == 2:a = 3

elif a == 3:a = 4

print a

2/13/17 Conditionals & Control Flow 36

a = 2

if a == 2:a = 3

if a == 3:a = 4

print a

prints 3 prints 4

Page 37: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

Nested Conditionals

def test_for_zeros(a, b):if a == 0:

if b == 0:print "Both arguments are zero"

else:print "The first argument is zero"

else:if b == 0:

print "The second argument is zero"else:

print "Neither argument is zero"

2/13/17 Conditionals & Control Flow 37

Page 38: Conditionals & Control Flow - Cornell University · Conditionals & Control Flow Lecture 8 CS 1110: Introduction to Computing Using Python [Andersen, Gries, Lee, Marschner, Van Loan,

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 zz = x if x > y else y

2/13/17 Conditionals & Control Flow 38

expression, not statement