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

Preview:

Citation preview

Programming for Engineers

in Python

Sawa 2015

Lecture 2: Lists and Loops

1

2

Plan for today• While loop• Lists• For loop

While Loop

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

while expression:statement1statement2…

expression

true

false

statement(s)

4

Example - factorial

#factorialn = 7

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

fact = fact * ii = i + 1

print n, "! = ", fact

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

Infinite Loops

i = 1while i < 4:print i

6

7

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

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

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

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

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

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

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

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

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

Nested Lists

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

• What is len(mat) ?

16

Nested Lists

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

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

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

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

17

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

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

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

21

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

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

For Loop

Indentation determines the scope of the iteration.

Note

No infinite lists in Python

No infinite for loops!

23

For Example

Compute 1 + 2 + … + 100:

The sum is 5050

Shortcut:

sum(range(1,101))

24

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

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

27

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

28

Fibonacci series

Write a program that for an integer n > 0,

prints the nth Fibonacci number.

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

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?

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

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]

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

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

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

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

# Find smallest divisor using for loop:

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

if n % div == 0:break

print div

Break Example

37

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.

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]

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

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!

42

Programming Style

• Comments: #• Meaningful variables names

Why is it important?

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 ‘/’, ‘*’

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.

45

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

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

*****

****

*

Exercise – Triangle Printout

Recommended