Class 21 — Monday March 14
Introduction to "while"
Look both ways
Joke of the day
- Why do some computer scientists die while washing their hair?
Agenda
- Consider
range()
variations
- Introduce
while
statement
- Continue exploration of
if
statement
- Review test
To do
- Examine artifacts
- Examine
while
epistle
- Prepare for next class by looking at
dict
module documentation
Examples
- Program arrangements.py
- Program yes_or_no.py
- Program guess_what.py
Problem arrangements.py
- Fun fact: a
range
is a type of sequence. Other sequences we have used have been strings and lists.
- Up to now whenever we have had a
range()
loop, we always had two arguments handed torange()
.range()
can also handle having one or three arguments.
- If a single argument
n
is given torange()
, then Python treats it asrange(
0,
n
)
.
- If three arguments are given to
range()
as inrange(
m,
n,
k
)
, then
- If
k
is positive, then
- The start value is
m
; the stop value is less thann
; and the other values go up in steps ofk
- If
k
is negative, then
- The start value is
m
; the stop value is greater thann
; and the other values go down in steps ofk
- Another fun fact: we can a
range
sequence into a list sequence using the built-in functionlist()
on arange
.
-
Some program runs
Enter integers m, n, and k: 3 8 2
i: 3
i: 5
i: 7
list( range( m, n, k ) ): [3, 5, 7]
Enter integers m, n, and k: 10 6 -3
i: 10
i: 7
list( range( m, n, k ) ): [10, 7]
For your consideration
- How would you handle the problem of getting a yes or no reponse from a user, where case of the letters do not matter. Once gotten, the valid response is echoed (printed).
- Brainstorming
- Do we know ahead of time, how many often we need to loop?
- Are there action(s) that need to be done multiple times?
- Are there action(s) that need to be done once?
- Some possible runs
Enter (yes / no): YES
yes
Enter (yes / no): No
no
Enter (yes / no): yeah
Enter (yes / no): yeap
Enter (yes / no): tá
Enter (yes / no): כן
Enter (yes / no): ndiyo
Enter (yes / no): haan
Enter (yes / no): YeS
yes
Enter (yes / no): nah
Enter (yes / no): không
Enter (yes / no): nope
Enter (yes / no): aʻole
Enter (yes / no): ei
Enter (yes / no): NO
no
Whiling away
- Like many programming languages, Python provides more than one way to iterate actions (repeatedly execute). We are concerned here with its
while
looping offering.
- The
while
loop differs from thefor
loop in that the number of times it iterates is not based on the size of a list or range; instead, iteration is based on a logical test expression.
- The basic
while
state has the form:
while ( test expression ) :
action
- When Python reaches a
while
loop, it will repeatedly execute the loop's actions as long as the test expression evaluates to true. When the test expression evaluates false, the program drops down to the statement following the loop.
- FYI: Python is one of the languages whose
while
statement also allows an optionalelse
. Theelse
action is executed once the test expression evaluates to false.
while ( test expression ) :
action
else :
action
looking_for_a_yes_or_no = True
while ( looking_for_a_yes_or_no == True ) :
reply = input( 'Enter (yes / no): ' )
reply = reply.lower()
if ( reply in [ 'yes', 'no' ] ) :
looking_for_a_yes_or_no = False
print( reply )
Problem yes_or_no.py
- Solicit's a yes or no response from it's user.
Problem guess_what.py
- Play a guessing name with the user. The program is to determine what number the user has guessedl, where the possible numbers are from 0 to 100,000.
- Brainstorming
- How would you solve the problem if you were the guesser?
- Can we do this with a
for
loop? If, so what are some possible ways?
- Can we do this with a
while
loop? If, so what are some possible ways?
Agenda
- Introduce
dict
To do
- Examine artifacts
- Examine
dict
module documentation
- Examine
collections
epistle
- Examine
while
epistle
Examples
- Program romantic.py
- Program unromantic.py
- Program floradation.py
- Program even_odd.py
- Program good_doggie.py
Some data sets
Problem romantic.py
- Get a roman numeral and determine its integer equivalent
Some program runs
Enter Roman numeral: V
5
Enter Roman numeral: d
500
Enter Roman numeral: 0
Unknown
Problem unromantic.py
- Get a word and print its English equivalent
Some program runs
RecursionError: maximum recursion depth exceeded during compilation
Discussion
- Repeat the word carrot ten times out loud
- The human brain is great with associations; e.g., many of us associate apple with red, sky with blue, and programming with fun.
- A
dict
is Python's software equivalent of a collection of associations. In particular, adict
is an un-ordered collection of associations.
- The elements of a
dict
are called mappings. A mapping associates one object (called the key) with another object (called the value).
- The literal for an empty
dict
is{}
.
- A literal mapping is written using the
:
to separate the key with its value. For example, the below variableflora_to_color
is adict
that associates flora with colors.
flora_to_color = { 'spruce': 'green', 'apple': 'red', 'shamrock': 'green',
'banana': 'yellow', 'potato': 'brown', 'eggplant': 'purple' }
- The
len()
function works on adict
. For example,len(
flora_to_color
)
is 6, because the definition offlora_to_color
specified six mappings.
- The brackets
[]
operator in conjunction with assignment can be used to put a mapping into adict
. For example, the statement below adds the mapping'lemon'
to'yellow'
.
flora_to_color[ 'lemon' ] = 'yellow'
- The keys of a
dict
are always distinct. So, the following statement
flora_to_color[ 'potato' ] = 'golden'
would cause
flora_to_color
to lose its association of mappingpotato
tobrown
— its association with'potato'
is now only togolden
.
- As our
flora_to_color
example shows, the values of adict
are not necessarily unique.
- Python
dict
's have functionskeys()
andvalues()
for getting a hold of keys and values.
the_keys = flora_to_color.keys()
the_values = flora_to_color.values()
While there are never any duplicates in the keys, depending upon the dictionary there may be duplicates in the values.
- Other information about
dict
objects are listed below. In the below, assume thatd
is adict
.
d.get(k)
returns the value that keyk
maps to ind
. If there is no such value, returnsNone
.
d[k]
returns the value that keyk
maps to ind
. If there is no such value, an exception (error) occurs.
(k in d)
indicates whetherk
is a key value ind
.
(k not in d)
indicates whetherk
is not a key value ind
.
d.clear()
removes all mappings ind
.
del d[k]
removesk
’s mapping ind
.
- Information on a
dict
is available in the module documentation section of the website.
- Additional information on collections is in general is available in the collections epistile.
Problem even_odd.py
- Introduce the Python
dict
data structure
Some program runs
Enter a number: 3
3 odd
Enter even or odd: even
a number is even if its remainder divided by 2 is 0
Enter a number: 6
6 even
Enter even or odd: odd
a number is odd if its remainder divided by 2 is 1
Problem good_doggie.py
- For a series of dog information requests, the program reports what it knows about the dog.
- Its dog information data source is located at URL
- Brainstorming
- How should we store the dog information?
- How do we get and store the input?
- How many times do we set up the dog information
- What times of loops do we need?
- Sequential
- Nested
- Mixture of nested and sequential
Where am I
🦆 © 2022 Jim Cohoon | Resources from previous semesters are available. |