programming for engineers in python sawa 2015 lecture 2: lists and loops 1

45
Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

Upload: berniece-dickerson

Post on 13-Jan-2016

225 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

Programming for Engineers

in Python

Sawa 2015

Lecture 2: Lists and Loops

1

Page 2: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

2

Plan for today• While loop• Lists• For loop

Page 3: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

While Loop

Used to repeat the same instructions until a stop criterion is met

while expression:statement1statement2…

expression

true

false

statement(s)

Page 4: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

4

Example - factorial

#factorialn = 7

fact = 1i = 1while i <= n:

fact = fact * ii = i + 1

print n, "! = ", fact

Page 5: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

Example – smallest divisor

# Find the smallest divisor

n = 2015div = 2while n % div != 0: div = div + 1print "Smallest divisor of", n, "is", div

Can the while loop above be infinite?

5

Page 6: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

Infinite Loops

i = 1while i < 4:print i

6

Page 7: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

7

Plan for today• Highlights from last week• While loop• Lists• For loop

Page 8: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

Lists

A list is an ordered sequence of elements.

Create a list in Python:

>>> my_list = [2, 3, 5, 7, 11]>>> my_list[2,3,5,7,11]

8

Page 9: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

Lists are Indexable

Remember this?

The same indexing + slicing works for lists!

9

H e l l o

0 1 2 3 4 5

-5 -4 -3 -2 -1

Page 10: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

Lists are Indexable

>>> my_list = [2, 3, 5, 7, 11]>>> my_list[0]2>>> my_list[4]11>>> my_list[-3]5>>> my_list[5]Traceback (most recent call last):File "<pyshell#7>", line 1, in <module>my list[5]IndexError: list index out of range

10

11 7 5 3 2

4 3 2 1 0

-1 -2 -3 -4 -5

Page 11: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

Slicing>>> my_list = [1,2,3,4,5,6,7,8,9,10]

>>> my_list[1:5] # slicing[2, 3, 4, 5]>>> my_list[0:-1] # forward/backward indexing[1, 2, 3, 4, 5, 6, 7, 8, 9] >>> my_list[::2] # add a step[1, 3, 5, 7, 9]

11

1 2 3 4 5 6 7 8 9 10

0 1 2 3 4 5 6 7 8 9 10

-10 -9 -8 -7 -6 -5 -4 -3 -2 -1

Page 12: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

Slicing# reverse>>> my_list[::-1][10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

# output is an empty list. This is NOT an error>>> my_list[3:8:-2][]

# slicing does NOT change original list>>> my_list[1,2,3,4,5,6,7,8,9,10]

12

Page 13: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

ListsLists can contain strings:

>>> days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]

>>> days[3] 'Wed' >>> len(days)7

Lists can mix different types:>>> pi = ['pi', 3.14159, True]

# student: name, age, height, SAT>>> student = ['Roi', 21, 1.83, 782]

13

Page 14: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

Lists – DynamicMaintain a list of the students either by name or by id:

>>> students = ['Itay',9255587, 'Alon', 'Zohar',744554887]

>>> students[2]'Alon'• Michal decided to join the course, so we update the list:

# append - add an element to the end of the list

>>> students.append('Michal')>>> students['Itay', 9255587, 'Alon', 'Zohar', 744554887, 'Michal']

14

Page 15: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

Lists – Dynamic

• Alon wants to leave the course:

>>> students.remove('Alon')>>> students['Itay', 9255587, 'Zohar', 744554887, 'Michal']

remove removes only the first occurrence of a value.

15

Page 16: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

Nested Lists

>>> mat = [ [1, 2, 3],[4, 5, 6] ]>>> mat[1][4,5,6]>>> mat[1][2]6

• What is len(mat) ?

16

Page 17: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

Nested Lists

>>> family = [‘Meir‘, [‘Yossi‘,

[‘Yuval‘, [‘Elisha‘]] ],

[‘Yitzhak‘, [‘Meir‘], [‘Orna‘], [‘Evyatar‘] ],

[‘Gavri‘, [’Uri‘], [‘Boaz‘] ],]

17

Page 18: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

RangeAn ordered list of integers in the range.

>>> range(10)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

range(from, to) contains all integers k satisfying from ≤ k < to.

range(to) is a shorthand for range(0, to).

>>> range(2,10)[ 2, 3, 4, 5, 6, 7, 8, 9]>>> range(-2,2)[-2, -1, 0, 1]>>> range(4,2)[]

18

Page 19: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

Range>>> type(range(3))<type 'list'>

Step size:

range(from, to, step) returns:

from, from+step, from+2*step,…, from+i*step

until to is reached, not including to itself.

>>> range(0,10,2)[0, 2, 4, 6, 8]>>> range(10,0,-2)[10, 8, 6, 4, 2]

19

Page 20: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

Range

>>> range(0, 10, -1)[]>>> range(0,10,0)Traceback (most recent call last): File "<pyshell#21>", line 1, in <module>

range(0,10,0)ValueError: range() step argument must not be zero

20

Page 21: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

21

Plan for today• Highlights from last week• While loop• Lists• For loop

Page 22: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

For Loopfor element in iterable:

statement1

statement2

Run over all elements in the iterable (list, string, etc.)

Iteration 0: Assign element = iterable[0]• Execute the statements

Iteration 1: Assign element = iterable[1]• Execute the statements

22

Page 23: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

For Loop

Indentation determines the scope of the iteration.

Note

No infinite lists in Python

No infinite for loops!

23

Page 24: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

For Example

Compute 1 + 2 + … + 100:

The sum is 5050

Shortcut:

sum(range(1,101))

24

Page 25: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

25

For Example

# factorial

n = 8

fact = 1

for i in range(2, n+1):

fact = fact * i

print n, "! = ", fact

Syntactic sugar:

fact *= i is equivalent to fact = fact * i

Page 26: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

26

Fibonacci series

Fibonacci series

0, 1, 1, 2, 3, 5, 8, 13, 21, 34

Definition

fib(0) = 0

fib(1) = 1

fib(n) = fib(n-1) + fib(n-2)

en.wikipedia.org/wiki/Fibonacci_number Leonardo Fibonacci

1170-1250, Italy

Page 27: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

27

סלט פיבונאצ'י

Page 28: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

28

Fibonacci series

Write a program that for an integer n > 0,

prints the nth Fibonacci number.

Page 29: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

29

Fibonacci series - code

n = 10

if n < 2:

curr = n

else:

prev = 0

curr = 1

for i in range(2, n+1):

new = prev + curr

prev = curr

curr = new

print "The nth Fibonacci number is", curr

Page 30: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

30

Fibonacci – Another Coden = input(“Insert a non-negative number")

fibs = [0, 1]

for i in range(2, n + 1):

fibs.append(fibs[-1] + fibs[-2])

print fibs[n]

• Is shorter code necessarily better?

• What about memory consumption?

Page 31: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

For loop – Average

# Average

ages = [19, 22, 20]

sum_ages = 0

for age in _____:

____________

sum_ages = sum_ages/len(ages)

31

ages

sum_ages += age

Page 32: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

For loop – Average Distance

start_points = [5, 2, 8]

end_points = [15, 14, 21]

num_points = len(end_points)

sum_dist = 0

for i in ____________:

____________________

sum_dist = sum_dist / num_points

32

range(num_points)

sum_dist += end_points[i] – start_points[i]

Page 33: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

For Loop and Strings

Iterate over strings:

name = "Kobe"for letter in name: print "Give me", letterprint "What did we get?", name

Give me K

Give me o

Give me b

Give me e

What did we get?

33

Page 34: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

Example: Change Elements in Listlst = [1, 4, 3, 6, 8] # we want to zero every odd element.

34

# take 2

inds_lst = range(len(lst))

for ind in inds_lst:

if lst[ind] % 2 == 0:

lst[ind] = 0

print lst

# take 1

for elem in lst:

if elem % 2 == 0:

elem = 0

print lst

Page 35: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

For loop – Think First!

• Given a sequence seq, we’ve seen 2 ways to go over it using a for loop:1. Go over the elements of seq directly.

for elem in seq: … # Do something with elem.

2. Go over the indexes of seq:for i in range(len(seq)): … # Do something with seq[i].

Before writing a for loop – choose the form which works better for you.

35

Page 36: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

Break – breaking loops

break terminates the nearest enclosing loop, skipping the code that follows the break inside the loop.

Used for getting out of loops when a condition occurs.

Example:

for elem in lst:if elem < 0:

print "First negative number is", elem

break

36

Page 37: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

# Find smallest divisor using for loop:

for div in range(2, n+1):

if n % div == 0:break

print div

Break Example

37

Page 38: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

38

Example - Prime

n = 2013

for div in range(2,int(n**0.5)): if n % div == 0:

breakif n % div == 0:

print n, "is not prime"else:

print n, "is prime"

range must accept argument of the type int so we perform casting on the result of the power operation.

Page 39: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

Continue

39

The continue statement, continues with the next iteration of the loop.

Example - create a list of unique elements:

>>> lst = [1,4,5,8,3,5,7,1,2]>>> uniques = []>>> for x in lst:

    if x in uniques:          continue

    uniques.append(x)

>>> print uniques[1,4,5,8,3,7,2]

Page 40: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

40

for or while?

• In most cases it is more natural to use for• In some cases it is better to use while• for:

• Predefined number of iterations• No need to initialize or advance the loop

variable• while:

• Unknown number of iterations• Can specify a stop condition

Page 41: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

Let’s Play!

secret = input(“Choose a number: ”))

while True:

guess = input("Enter guess: "))

if _______________:

break

elif ______________:

print "Try a higher number"

else:

print "Try a lower number"

print "Right!"

41

guess == secret

guess < secret

Player 1

Player 2

Hint (sample output)

Choose a number: 34Enter guess: 100Try a lower numberEnter guess: 50Try a lower numberEnter guess: 25Try a higher numberEnter guess: 35Try a lower numberEnter guess: 34Right!

Page 42: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

42

Programming Style

• Comments: #• Meaningful variables names

Why is it important?

Page 43: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

43

Exercise – Integer Division

• Input:• Two positive integers – A and B

• Output:• How many times A contains B (the result of the

integer division A/B)

• Do not use the operators ‘/’, ‘*’

Page 44: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

44

Exercise – Power of Two

• Input: a positive integer A• Output:

If there is an integer N such that

A == 2N

then print N, otherwise print a suitable message.

Page 45: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1

45

Write a program that prints an upside-down triangle of *.

Input: The height of the triangle. *****

*****

****

*

Exercise – Triangle Printout