View
227
Download
0
Category
Tags:
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