Uploaded by JEEVIKA THARINI

decisions

advertisement
CPSC 231:
Making Decisions In Python
In this section of notes you will learn
how to have your programs choose
between alternative courses of action.
slide 1
Department of Computer Science, University of Calgary, Fall 2014
James Tam
Programming: Decision Making Is Branching
•Decision making is choosing among alternates (branches).
•Why is it needed?
- When alternative courses of action are possible and each action may
produce a different result.
•In terms of a computer program the choices are stated in the
form of a question that only yield a binary answer (is it true or
false that the user made a particular selection).
- Although the approach is very simple, modeling decisions in this fashion
is a very useful and powerful tool.
slide 2
James Tam
High Level View Of Decision Making For The
Computer
Is income
below
$10,000?
True
False
Is income
between $10K
- $20K?
•Nominal
income
deduction
•Eligible for
social
assistance
slide 3
True
Income tax =
20%
False
etc.
James Tam
How To Determine If Branching Can Be Applied
•Under certain circumstances or conditions events will occur
(the program reacts in a certain way if certain conditions have
been met).
- The branch determines if the event occurred and reacts accordingly.
•Examples:
- If users who don’t meet the age requirement of the website he/she will
not be allowed to sign up (conversely if users do meet the age
requirement he/she will be allowed to sign up).
- If an employee is deemed as too inexperienced and too expensive to
keep on staff then he/she will be laid off.
- If a person clicks on a link on a website for a particular location then a
video will play showing tourist ‘hot spots’ for that location.
- If a user enters invalid age information (say negative values or values
greater than 114) then the program will display an error message.
slide 4
James Tam
Decision-Making In Programming (Python)
•Decisions are questions with answers that are either true or
false (Boolean expressions) e.g., Is it true that the variable
‘num’ is positive?
•The program may branch one way or another depending upon
the answer to the question (the result of the Boolean
expression).
•Decision making/branching constructs (mechanisms) in Python:
- If (reacts differently only for true case)
- If-else (reacts differently for the true or false cases)
- If-elif-else (multiple cases possible but only one case can apply, if one
case is true then it’s false that the other cases apply)
slide 5
James Tam
Decision Making With An ‘If’
Question?
True
Execute a statement
or statements
False
Remainder of
the program
slide 6
James Tam
Terminology
•The ‘body’ of a branch is the part of the program that will
execute when the Boolean expression evaluates to true.
Travel website
Click link for
Middle East?
(T/F)
Body: show video for Abu Dhabi
Images: courtesy of James Tam
slide 7
Click on link for
North America?
(T/F)
Body: show video for Lethbridge
James Tam
Terminology
•Operator/Operation: action being performed
•Operand: the item or items on which the operation is being
performed.
Examples:
2 + 3
2 * (-3)
slide 8
James Tam
The ‘If’ Construct
•Decision making: checking if a condition is true (in which case
something should be done).
•Format:
(General format)
if (Boolean expression):
body
(Detailed structure)
Boolean expression
if (<operand> <relational operator> <operand>):
body
Note: Indenting the body is
mandatory!
slide 9
James Tam
The ‘If’ Construct (2)
•Example (if1.py):
age = int(input("Age: "))
if (age >= 18):
print("You are an adult")
slide 10
James Tam
Allowable Operands For Boolean Expressions
Format:
if (operand
relational operator
operand):
Example:
if (age >= 18):
Some operand types
•integer
•floats (~real)
•String
•Boolean (True or False)
Make sure that you are comparing operands of the same type or at the very least they must be
comparable!
slide 11
James Tam
Allowable Relational Operators For Boolean
Expressions
if (operand
relational operator
operand) then
Python
Mathematical
operator
equivalent
Meaning
Example
<
<
Less than
5<3
>
>
Greater than
5>3
==
=
Equal to
5 == 3
<=
≤
Less than or equal to
5 <= 5
>=
≥
Greater than or equal to
5 >= 4
!=
≠
Not equal to
x != 5
slide 12
James Tam
Note On Indenting
•Indenting can make it easy to see structure (good style)
Notes ‘Introduction to computers’ CPSC
203, 217, 231
slide 13
James Tam
Note On Indenting (2)
•In Python indenting is mandatory in order to determine which
statements are part of a body (syntactically required in
Python).
# Single statement body
if (num == 1):
print("Body of the if")
print("After body")
# Multi-statement body (program ‘if2.py’)
taxCredit = 0
taxRate = 0.2
income = float(input("What is your annual income: "))
if (income < 10000):
print("Eligible for social assistance")
taxCredit = 100
tax = (income * taxRate) – taxCredit
print("Tax owed $%.2f" %(tax))
slide 14
James Tam
Common Mistake
•Do not confuse the equality operator '==' with the assignment
operator '='.
•Example (Python syntax error)1:
if (num = 1):
# Not the same as
if (num == 1):
To be extra safe some programmers put unnamed constants on the
left hand side of an equality operator (which always/almost always
results in a syntax error rather than a logic error if the assignment
operator is used in place of the equality operator).
•Usually (always?) a syntax error:
if (1 = num)
1 This not a syntax error in all programming languages so don’t get complacent and
assume that the language will automatically “take care of things” for you.
slide 15
James Tam
A Similar Mistake
•Example (Python logic error):
num == 1
slide 16
Not the same as num = 1
James Tam
An Application Of Branches
•Branching statements can be used to check the validity of data
(if the data is correct or if the data is a value that’s allowed by
the program).
•General structure:
if (error condition has occurred)
React to the error (at least display an error message)
•Example:
if (age < 0):
print("Age cannot be a negative value")
JT’s tip: if data can only take on a certain value (or range) do not automatically assume
that it will be valid. Check the validity of range before proceeding onto the rest of the
program.
slide 17
James Tam
Decision Making With An ‘If’: Summary
•Used when a question (Boolean expression) evaluates only to a
true or false value (Boolean):
- If the question evaluates to true then the program reacts differently. It
will execute the body after which it proceeds to the remainder of the
program (which follows the if construct).
- If the question evaluates to false then the program doesn’t react
differently. It just executes the remainder of the program (which follows
the if construct).
slide 18
James Tam
Decision Making With An ‘If-Else’
Question?
True
Execute a statement
or statements (if body)
False
Execute a statement
or statements (else body)
Remainder of
the program
slide 19
James Tam
The If-Else Construct
•Decision making: checking if a condition is true (in which case
something should be done) but unlike ‘if’ also reacting if the
condition is not true (false).
•Format:
if (operand
relational operator
operand):
body of 'if'
else:
body of 'else'
additional statements
slide 20
James Tam
If-Else Construct (2)
•Program name: if_else1.py
•Partial example:
if (age < 18):
print("Not an adult")
else:
print("Adult")
print("Tell me more about yourself")
If case
Else case
slide 21
James Tam
Lesson: Read Things The Way They’re Actually Stated
(Instead of How You Think They’re Stated)
You this read wrong
slide 22
James Tam
Lesson: Read Things The Way They’re Actually Stated
(Instead of How You Think They’re Stated)
•Example: Actual Code (previous version <=2012)
if (age >= 18):
print("Adult")
else:
print("Not an adult")
print("Tell me more about yourself")
JT’s note: this version of the program is logically equivalent (does the
same thing) as the version you just saw. For practice trace by hand both
versions to convince yourself that this is the case. Then run both versions
to verify.
slide 23
James Tam
Lesson: Read Things The Way They’re Actually Stated
(Instead of How You Think They’re Stated)
•Example: How some students interpreted the code (optical
illusion?)
if (age >= 18):
print("Adult")
else:
print("Not an adult")
print("Tell me more about yourself")
JT’s tip: one way of making
sure you read the program
code the way it actually is
written rather than how you
think it should be is to take
breaks from writing/editing
slide 24
James Tam
If-Else Example
•Program name: if_else2.py
•Partial example:
if (income < 10000):
print("Eligible for social assistance")
taxCredit = 100
taxRate = 0.1
else:
print("Not eligible for social assistance")
taxRate = 0.2
tax = (income * taxRate) - taxCredit
slide 25
James Tam
Quick Summary: If Vs. If-Else
•If:
- Evaluate a Boolean expression (ask a question).
- If the expression evaluates to true then execute the ‘body’ of the if.
- No additional action is taken when the expression evaluates to false.
- Use when your program is supposed to react differently only when the
answer to a question is true (and do nothing different if it’s false).
•If-Else:
- Evaluate a Boolean expression (ask a question).
- If the expression evaluates to true then execute the ‘body’ of the if.
- If the expression evaluates to false then execute the ‘body’ of the else.
- That is: Use when your program is supposed to react differently for both
the true and the false cases.
slide 26
James Tam
Logical Operations
•There are many logical operations but the three most
commonly used in computer programs include:
- Logical AND
- Logical OR
- Logical NOT
slide 27
James Tam
Logical AND
•The popular usage of the logical AND applies when ALL
conditions must be met.
•Example:
- Pick up your son AND pick up your daughter after school today.
Condition I
Condition II
•Logical AND can be specified more formally in the form of a
truth table.
Truth table (AND)
slide 28
C1
C2
C1 AND C2
False
False
False
False
True
False
True
False
False
True
True
True
James Tam
Logical AND: Three Input Truth Table
Truth table
slide 29
C1
C2
C3
C1 AND C2 AND C3
False
False
False
False
False
False
True
False
False
True
False
False
False
True
True
False
True
False
False
False
True
False
True
False
True
True
False
False
True
True
True
True
James Tam
Evaluating Logical AND Expressions
•True AND True AND True
•False AND True AND True
•True AND True AND True AND False
slide 30
James Tam
Logical OR
•The correct everyday usage of the logical OR applies when
ATLEAST one condition must be met.
•Example:
- You are using additional recommended resources for this course: the
online textbook OR the paper textbook available in the bookstore.
Condition I
Condition II
•Similar to AND, logical OR can be specified more formally in the form of a truth
table.
Truth table
slide 31
C1
C2
C1 OR C2
False
False
False
False
True
True
True
False
True
True
True
True
James Tam
Logical OR: Three Input Truth Table
Truth table
slide 32
C1
C2
C3
C1 OR C2 OR C3
False
False
False
False
False
False
True
True
False
True
False
True
False
True
True
True
True
False
False
True
True
False
True
True
True
True
False
True
True
True
True
True
James Tam
Evaluating Logical OR Expressions
•True OR True OR True
•False OR True OR True
•False OR False OR False OR True
slide 33
James Tam
Logical NOT
•The everyday usage of logical NOT negates (or reverses) a
statement.
•Example:
- I am finding this class quite stimulating and exciting .....NOT!!!
Statement (logical condition)
Negation of the
statement/condition
•The truth table for logical NOT is quite simple:
Truth table
slide 34
S
Not S
False
True
True
False
James Tam
Evaluating More Complex Logical Expressions
•True OR True AND True
•NOT (False OR True) OR True
•(False AND False) OR (False AND True)
•NOT NOT NOT NOT True
•NOT NOT NOT False
slide 35
James Tam
Extra Practice
•(From “Starting out with Python (2nd Edition)” by Tony Gaddis)
Assume the variables a = 2, b = 4, c = 6
For each of the following conditions indicate whether the final value
is true or false.
Expression
Final result
a == 4 or b > 2
6 <= c and a > 3
1 != b and c != 3
a >-1 or a <= b
not (a > 2)
slide 36
James Tam
Logic Can Be Used In Conjunction With
Branching
•Typically the logical operators AND, OR are used with multiple
conditions/Boolean expressions:
- If multiple conditions must all be met before the body will execute. (AND)
- If at least one condition must be met before the body will execute. (OR)
•The logical NOT operator can be used to check for inequality
(not equal to).
- E.g., If it’s true that the user did not enter an invalid value the program
can proceed.
slide 37
James Tam
Decision-Making With Multiple Boolean
Expressions (Connected With Logic)
•Format:
if (Boolean expression) logical operator (Boolean expression):
body
•Example: if_and_positive.py
if (x > 0) and (y > 0):
print("All numbers positive")
slide 38
James Tam
Forming Compound Boolean Expressions With
The “OR” Operator
•Format:
if (Boolean expression) or (Boolean expression):
body
•Name of the online example: if_or_hiring.py
gpa = float(input("Grade point (0-4.0): "))
yearsJobExperience = int(input("Number of years of job
experience: "))
if (gpa > 3.7) or (yearsJobExperience > 5):
print("You are hired")
else:
print("Insufficient qualifications")
slide 39
James Tam
Forming Compound Boolean Expressions With
The “AND” Operator
•Format:
if (Boolean expression) and (Boolean expression):
body
•Name of the online example: if_and_firing.py
yearsOnJob = int(input("Number of years of job experience:
"))
salary = int(input("Annual salary: "))
if (yearsOnJob <= 2) and (salary > 50000):
print("You are fired")
else:
print("You are retained")
slide 40
James Tam
Quick Summary: Using Multiple Expressions
•Use multiple expressions when multiple questions must be
asked and the result of expressions are related:
•AND (strict: all must apply):
•All Boolean expressions must evaluate to true before the entire
expression is true.
•If any expression is false then whole expression evaluates to false.
•OR (at least one must apply):
•If any Boolean expression evaluates to true then the entire expression
evaluates to true.
•All Boolean expressions must evaluate to false before the entire
expression is false.
slide 41
James Tam
Nested Decision Making
•Decision making is dependent.
•The first decision must evaluate to true (“gate keeper”) before
successive decisions are even considered for evaluation.
Question 1?
True
Question 2?
True
Statement or
statements
False
False
Remainder of
the program
slide 42
James Tam
Nested Decision Making
•One decision is made inside another.
•Outer decisions must evaluate to true before inner decisions
are even considered for evaluation.
•Format:
if (Boolean expression):
if (Boolean expression):
body
slide 43
Outer body
Inner body
James Tam
Nested Decision Making (2)
•Partial example: nesting.py
if (income < 10000):
if (citizen == 'y'):
print("This person can receive social assistance")
taxCredit = 100
tax = (income * TAX_RATE) - taxCredit
slide 44
James Tam
Question
•What’s the difference between employing nested decision
making and a logical AND?
slide 45
James Tam
Decision-Making With Multiple
Alternatives/Questions
• IF (single question)
- Checks a condition and executes a body if the condition is true
• IF-ELSE (single question)
- Checks a condition and executes one body of code if the condition is
true and another body if the condition is false
• Approaches for multiple (two or more) questions
- Multiple IF's
- IF-ELIF-ELSE
slide 46
James Tam
Decision Making With Multiple If’s
Question?
False
True
Statement or
statements
Question?
False
True
Statement or
statements
Remainder of
the program
slide 47
James Tam
Multiple If's: Non-Exclusive Conditions
•Any, all or none of the conditions may be true (independent)
•Employ when a series of independent questions will be asked
•Format:
if (Boolean expression 1):
body 1
if (Boolean expression 2):
body 2
:
statements after the conditions
slide 48
James Tam
Multiple If's: Non-Exclusive Conditions
(Example)
•Example:
if (ableAge > 0):
print("Happy birthday!")
if (bakerAge > 0):
print("Happy birthday!")
if (foxtrotAge > 0):
print("Happy birthday!")
slide 49
James Tam
Multiple If's: Mutually Exclusive Conditions
•At most only one of many conditions can be true
•Can be implemented through multiple if's
Inefficient
combination!
•Example: The name of the complete online program is:
“grades_inefficient.py”
if (gpa == 4):
letter = 'A'
if (gpa == 3):
letter = 'B'
if (gpa == 2):
letter = 'C'
if (gpa == 1):
letter = 'D'
if (gpa == 0):
letter = 'F'
slide 50
James Tam
Decision Making With If-Elif-Else
True
Question?
Statement or
statements
False
True
Question?
Statement or
statements
False
Statement or
statements
Remainder of
the program
slide 51
James Tam
Multiple If-Elif-Else: Use With Mutually
Exclusive Conditions
•Format:
if (Boolean expression 1):
body 1
elif (Boolean expression 2):
body 2
:
else
body n
statements after the conditions
slide 52
Mutually exclusive
•One condition evaluating to
true excludes other conditions
from being true
•Example: having your current
location as ‘Calgary’ excludes
the possibility of the current
location as ‘Edmonton’,
‘Toronto’, ‘Medicine Hat’
James Tam
If-Elif-Else: Mutually Exclusive Conditions
(Example)
•Example: The name of the complete online program is:
“grades_efficient.py”
if (gpa == 4):
letter = 'A'
elif (gpa == 3):
letter = 'B'
elif (gpa == 2):
letter = 'C'
elif (gpa == 1):
letter = 'D'
elif (gpa == 0):
letter = 'F'
This approach is more
efficient when at most
only one condition can
be true.
Extra benefit:
The body of the else
executes only when all the
Boolean expressions are
false. (Useful for error
checking/handling).
else:
print("GPA must be one of '4', '3', '2', '1' or '1'“)
slide 53
James Tam
When To Use Multiple-If’s
•When all conditions must be checked (more than one Boolean
expressions for each ‘if’ can be true).
- Non-exclusive conditions
•Example:
- Some survey questions:
•When all the questions must be asked
•The answers to previous questions will not affect the asking of later questions
E.g.,
Q1: What is your gender?
Q2: What is your age?
slide 54
James Tam
When To Use If, Else-If's
•When all conditions may be checked but at most only one
Boolean expression can evaluate to true.
- Exclusive conditions
•Example:
- Survey questions:
•When only some of the questions will be asked
•The answers to previous questions WILL affect the asking of later questions
E.g.,
Q1: Are you an immigrant?
Q2 (ask only if the person answered ‘no’ to the previous): In what Canadian
city were you born?
slide 55
James Tam
Extra Practice
•(From “Starting out with Python” by Tony Gaddis).
Write a program that prompts the user to enter a number within the
range of 1 through 10. The program should display the Roman
numeral version of that number. If the number is outside the range
of 1 through 10, the program should display an error message.
The table on the next slide shows the Roman numerals for the
numbers 1 through 10.
slide 56
James Tam
Extra Practice (2)
slide 57
Number
Roman Numeral
1
I
2
II
3
III
4
IV
5
V
6
VI
7
VII
8
VIII
9
IX
10
X
James Tam
Recap: What Decision Making Mechanisms Are
Available /When To Use Them
Mechanism
When To Use
If
Evaluate a Boolean expression and execute some code
(body) if it’s true
If-else
Evaluate a Boolean expression and execute some code
(first body: ‘if’) if it’s true, execute alternate code (second
body: ‘else’) if it’s false
Multiple
if’s
Multiple Boolean expressions need to be evaluated with
the answer for each expression being independent of the
answers for the others (non-exclusive). Separate
instructions (bodies) can be executed for each expression.
If-elifelse
Multiple Boolean expressions need to be evaluated but
zero or at most only one of them can be true (mutually
exclusive). Zero bodies or exactly one body will execute.
Also it allows for a separate body (else-case) to execute
when all the if-elif Boolean expressions are false.
slide 58
James Tam
Recap: When To Use Compound And Nested
Decision Making
Mechanism
When To Use
Compound
decision
making
There may have to be more than one condition to be
considered before the body can execute. All
expressions must evaluate to true (AND) or at least
one expression must evaluate to true (OR).
Nested
decision
making
The outer Boolean expression (“gate keeper”) must
be true before the inner expression will even be
evaluated. (Inner Boolean expression is part of the
body of the outer Boolean expression).
slide 59
James Tam
Testing Decision Making Constructs
•Make sure that the body of each decision making mechanism
executes when it should.
•Test:
1) Obvious true cases
2) Obvious false cases
3) Boundary cases
slide 60
James Tam
Testing Decisions: An Example
Program name: first_test_example.py
num = int(input("Type in a value for num: "))
if (num >= 0):
print("Num is non-negative. ")
else:
print("Num is negative. ")
slide 61
James Tam
Lesson: Avoid Using A Float When An Integer
Will Do
Program name: real_test.py
num = 1.0 - 0.55
if (num == 0.45):
print("Forty five")
else:
print("Not forty five")
slide 62
James Tam
Epsilon
•Because floating point numbers are only approximations of
real numbers when performing a comparison “seeing if two
numbers are ‘close’ to each other” sometimes an Epsilon is
used instead of zero.
•Epsilon is a very small number.
•If the absolute difference between the numbers is less than
the Epsilon then the numbers are pretty close to each other
(likely equal).
slide 63
James Tam
Not Using Epsilon: Floating Point Error
Example name: no_epsilon.py
a = 0.15 + 0.15
b = 0.2 + 0.1
if (a == b):
print("Equal")
else:
print("Not equal")
slide 64
James Tam
Using Epsilon: Better Approach
Example name: employing_epsilon.py
EPSILON = 0.00001
a = 0.15 + 0.15
b = 0.2 + 0.1
if (abs((a - b)/b) < EPSILON):
print("Equal: the different is less than a small number")
else:
print("Not equal")
slide 65
James Tam
Extra Practice
•(From “Starting out with Python” by Tony Gaddis)
The following code contains several nested if-else statements.
Unfortunately it was written without proper alignment and
indentation. Rewrite the code and use the proper conventions of
alignment and indentation.
slide 66
James Tam
Extra Practice (2)
# Grade cut-offs
if (score >= A_SCORE):
A_SCORE = 90
print("Your grade is A")
B_SCORE = 80
else:
C_SCORE = 70
if (score >= B_SCORE):
D_SCORE = 60
print("Your grade is B")
else:
if (score >= C_SCORE):
print("Your grade is C")
else:
Common student question: If
there isn’t a pre-created solution
then how do I know if I “got this
right”?
if (score >= D_SCORE):
print("Your grade is D")
else:
print("Your grade is F")
slide 67
James Tam
Rule Of Thumb: Branches
•Be careful that your earlier cases don’t include the later cases
if each case is supposed to be handled separately and
exclusively.
slide 68
Example 1
Example 2
if (num >= 0):
if (num >= 100):
elif (num >= 10):
elif (num >= 10):
elif (num >= 100):
elif (num >= 0):
James Tam
Extra Practice: Grades
•Write a program that converts percentages to one of the
following letter grades: A (90 – 100%), B (80 – 89%), C (70 –
79%), D (60 – 69%), F (0 – 59%).
# First approach
if (percentage <= 100) or (percentage >= 90):
letter = 'A'
elif (percentage <= 89) or (percentage >= 80):
letter = 'B'
Etc.
# Second approach
if (percentage <= 100) and (percentage >= 90):
letter = 'A'
elif (percentage <= 89) and (percentage >= 80):
letter = 'B'
Etc.
slide 69
James Tam
Decision Making: Checking Matches
•Python provides a quick way of checking for matches within a
set.
- E.g., for a menu driven program the user’s response is one of the values
in the set of valid responses.
Format:
(Strings)
if <string variable> in ("<string1> <string2>...<stringn>"):
body
(Numeric)
if <numeric variable> in (<number1>, <number2>,...<numbern>):
body
slide 70
James Tam
Decision Making: Checking Matches (2)
Example:
(String):
if answer in ("userName1 userName2 userName3"):
print("User name already taken")
else:
print("User name is allowed")
(Numeric):
if num in (1, 2, 3):
print("in set“)
slide 71
James Tam
Checking Matches: Another Example
•Complete example: user_names.py
userNames = ""
print("User names already been taken [%s]" %userNames)
userName = input("Enter a user name: ")
if (userName in userNames):
print("Name %s has already been taken" %userName)
else:
userNames = userNames + userName + " "
print()
slide 72
James Tam
Checking Matches: Another Example (2)
print("User names already been taken [%s]" %userNames)
userName = input("Enter a user name: ")
if (userName in userNames):
print("Name %s has already been taken" %userName)
else:
userNames = userNames + userName + " "
print()
print("Set of user name [%s]" %userNames)
slide 73
James Tam
After This Section You Should Now Know
•What are the three decision making constructs available in
Python:
- If
- If-else
- If-elif-else
- How does each one work
- When should each one be used
•Three logical operations:
- AND
- OR
- NOT
•How to evaluate and use decision making constructs:
- Tracing the execution of simple decision making constructs
- How to evaluate nested and compound decision making constructs and
when to use them
slide 74
James Tam
After This Section You Should Now Know (2)
•How the bodies of the decision making constructs are defined:
- What is the body of a decision making construct
- What is the difference between decision making constructs with simple
bodies and those with compound bodies
•What is an operand
•What is a relational operator
•What is a Boolean expression
•How multiple expressions are evaluated and how the different
logical operators work
•How to test decision making constructs
slide 75
James Tam
Copyright Notification
•“Unless otherwise indicated, all images in this presentation
are used with permission from Microsoft.”
slide 76
James Tam
Download