![Page 1: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/2.jpg)
2
Plan for today• While loop• Lists• For loop
![Page 3: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/6.jpg)
Infinite Loops
i = 1while i < 4:print i
6
![Page 7: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/23.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/24.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/25.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/26.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/27.jpg)
27
סלט פיבונאצ'י
![Page 28: Programming for Engineers in Python Sawa 2015 Lecture 2: Lists and Loops 1](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/28.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/29.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/30.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/31.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/32.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/33.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/34.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/35.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/36.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/37.jpg)
# 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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/38.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/39.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/40.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/41.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/42.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/43.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/44.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649eb05503460f94bb571f/html5/thumbnails/45.jpg)
45
Write a program that prints an upside-down triangle of *.
Input: The height of the triangle. *****
*****
****
*
Exercise – Triangle Printout