Sentinel logic, flags, break Taken from notes by Dr. Neil Moore

Slides:



Advertisements
Similar presentations
While loops.
Advertisements

Week 5: Loops 1.  Repetition is the ability to do something over and over again  With repetition in the mix, we can solve practically any problem that.
Introduction to Computing Science and Programming I
CS0004: Introduction to Programming Repetition – Do Loops.
Loops – While, Do, For Repetition Statements Introduction to Arrays
© 2004 Pearson Addison-Wesley. All rights reserved5-1 Iterations/ Loops The while Statement Other Repetition Statements.
ECE122 L9: While loops March 1, 2007 ECE 122 Engineering Problem Solving with Java Lecture 9 While Loops.
Loops and Iteration Chapter 5 Python for Informatics: Exploring Information
Fundamentals of Python: From First Programs Through Data Structures
Week 5 - Wednesday.  What did we talk about last time?  Exam 1!  And before that?  Review!  And before that?  if and switch statements.
CPS120 Introduction to Computer Science Iteration (Looping)
Mr. Dave Clausen1 La Cañada High School Chapter 6: Repetition Statements.
Lecture 4 Looping. Building on the foundation Now that we know a little about  cout  cin  math operators  boolean operators  making decisions using.
CPS120 Introduction to Computer Science Iteration (Looping)
Loops and Simple Functions CS303E: Elements of Computers and Programming.
Instructor: Alexander Stoytchev CprE 185: Intro to Problem Solving (using C)
While loops. Iteration We’ve seen many places where repetition is necessary in a problem. We’ve been using the for loop for that purpose For loops are.
Today… Python Keywords. Iteration (or “Loops”!) Winter 2016CISC101 - Prof. McLeod1.
CS 115 Lecture 5 Math library; building a project Taken from notes by Dr. Neil Moore.
CMSC201 Computer Science I for Majors Lecture 07 – While Loops
Repetition Structures
REPETITION CONTROL STRUCTURE
CHAPTER 4 REPETITION CONTROL STRUCTURE / LOOPING
Introduction To Repetition The for loop
CS 115 Lecture Flags.
Lecture 6 Repetition Richard Gesick.
Repetition (While-Loop) version]
The switch Statement, and Introduction to Looping
Python: Control Structures
Warm-up Program Use the same method as your first fortune cookie project and write a program that reads in a string from the user and, at random, will.
Chapter 5: Control Structures II
Loop Structures.
CS 115 Lecture 8 Structured Programming; for loops
Review If you want to display a floating-point number in a particular format use The DecimalFormat Class printf A loop is… a control structure that causes.
While Loops in Python.
Structured Programming; for loops Taken from notes by Dr. Neil Moore
Exceptions and files Taken from notes by Dr. Neil Moore
Sentinel logic, flags, break Taken from notes by Dr. Neil Moore
Control Structures - Repetition
While loops The while loop executes the statement over and over as long as the boolean expression is true. The expression is evaluated first, so the statement.
Lecture 4A Repetition Richard Gesick.
While Loops.
Iteration with While You can say that again.
Conditions and Ifs BIS1523 – Lecture 8.
CISC101 Reminders Quiz 1 grading underway Assn 1 due Today, 9pm.
CS 115 Lecture Flags.
Exceptions and files Taken from notes by Dr. Neil Moore
Java Programming Loops
We’re moving on to more recap from other programming languages
Structured Programming Taken from notes by Dr. Neil Moore
Coding Concepts (Basics)
Repetition Structures
Module 4 Loops.
3. Decision Structures Rocky K. C. Chang 19 September 2018
Chapter 6: Repetition Statements
Loop Strategies Repetition Playbook.
Module 4 Loops and Repetition 2/1/2019 CSE 1321 Module 4.
Python programming exercise
CISC101 Reminders All assignments are now posted.
CHAPTER 6: Control Flow Tools (for and while loops)
For loops Taken from notes by Dr. Neil Moore
Java Programming Loops
Repetition Statements (Loops) - 2
Another Example Problem
LOOPS The loop is the control structure we use to specify that a statement or group of statements is to be repeatedly executed. Java provides three kinds.
While Loops in Python.
CprE 185: Intro to Problem Solving (using C)
Module 4 Loops and Repetition 9/19/2019 CSE 1321 Module 4.
Presentation transcript:

Sentinel logic, flags, break Taken from notes by Dr. Neil Moore While loops Sentinel logic, flags, break Taken from notes by Dr. Neil Moore

While loops If you read the instructions on most shampoo bottles, “Lather, rinse, repeat” is what they say. This has a problem that it will never stop! How would you fix it? Later Rinse Repeat if necessary

Bounded and unbounded iteration The for loops we’ve been using are bounded or definite loops. The interpreter knows in advance how many times the loop will run That does not change once the loop starts. For i in range(5): i = 1 print(i) Even though we are changing I, the loop still runs five times! That’s kind of nice because it prevents infinite loops!

Unbounded iteration An example: asking the user to input a positive number If they give a negative number or zero, we’ll repeat the question. How many times do we need to repeat it? No way to know in advance

Unbounded iteration So we need some way to make a loop that can run an unlimited number of times An unbounded or indefinite loop Indefinite, not infinite! Most loops should stop eventually – we just can’t say when “Repeat if necessary” – we just need to describe “necessary”

While loop syntax and semantics while condition: body The condition is a boolean expression, just like an if. The body is an indented block of code Semantics Check the loop condition If False, end the loop If True, run the body and repeat steps 1-3 If the condition is False to begin with, the body never runs!

While loop syntax and semantics Structured programming guarantees One entrance: always starts by checking the condition at the top One exit: ends only when the condition is False Only checks the condition again after running the entire body Does NOT jump out of the body statements

Flowchart for while

Common errors with loops What happens if the condition is a tautology (always True)? The loop never ends! An infinite loop is usually an error Unless you are writing an Operating System Conversely, what if the condition is a contradiction (always False)? The body will never run at all Which is called dead code!

Confusion between while and if statements While loops and if statements DO look similar on the surface They both use boolean expressions on the first line of the structure They both have indented bodies They are NOT the same! If you need to repeat code, use a while If you need to test something only ONE time, use an if If you need to test something repeatedly, you need an if statement INSIDE a loop (for or while)

Sentinel Logic One common use for a while loop is to process data. We want to keep getting more data until we see a special value Read from a file until you see a blank line Ask for a number until the user enters zero. Get commands from the user until they type “quit” Read and log temperatures until one is out of range This special value (or values) is called a sentinel Just a fancy word for “guard” Sounds like a job for a while loop! But a while loop checks the condition at the start Be we can’t check until we have the first input data!

Loops with sentinel logic The solution: the sentinel loop pattern You get the input in two places Just before the loop starts as the last step of the loop body Get the first input while the input is not a sentinel: 2.1 Do something with the input 2.2 Get the next input num = int(input(“Enter a number, 0 to exit: “)) while num != 0: print(“Its reciprocal is”, 1 / num)

Input validation Users input all kinds of values which are not valid for the program. The program should protect itself from this “bad data” by refusing it and asking for another value. This logic is similar to sentinel value logic but as a slight twist: You repeat the loop if the input is bad So the “sentinel” is any good input What goes in the body of the loop? An error message to the user Get the next input Example: positive.py

Loop example: numeric input Remember our programs with int(input(…)). What happens when the user gives non-numeric input? It crashed. Which part, exactly, crashed? The type cast! So can we validate the input before doing the typecast?

Loop example: numeric input Python gives us a way to check if a string contains only digits. mystr.isdigit() remember the dot? a string is an object, isdigit is a method isdigit returns True if The string contains no non-digit characters, and It has at least one digit (so the method is badly named) It only works for non-negative integers, because “.” and “-” are not digits! There are other special symbols too, Arabic digits, etc. Later we will see how to do this properly with exceptions numeric.py

Flags and while loops Sometimes we only discover inside the loop that we want to leave the loop For example, “do you want to play again?” The best way to control this is to use a flag. A Boolean variable, we saw these with the if Use the flag as the condition of the while Initialize the flag before the loop When we discover that we’re done, change the flag’s value

While loop with a flag done = False while not done: play a round done = play_again() Why don’t we use sentinel logic? Sentinel logic would ask before the loop starts but we want to play a round before we ask!

While loops with a counter While loops can be combined with a counter to simulate a for loop over a range Initialize the counter to the starting value While the counter is less than the stop value: Do stuff Add the step value to the counter variable

While loops with a counter while i < 4: print(i, “squared is”, i**2) i += 1 Why would you ever write it this way? Maybe the step size changes Maybe there are multiple stopping conditions, not just the counter reaching the stop value

Another loop example: any Remember our “any” flag pattern: anyodd = False for num in 2, 1, 4, 16, 12, 0, 3: if num % 2 == 1: anyodd = True What if we don’t have all the numbers in advance? Then we can’t use a list with the for loop Also notice that it keeps going even after we’re sure the answer is True Because anyodd can never become False again As soon as we see an odd number, we can stop because the answer must be True! We can solve both problems with a while loop and a flag!

While loop example: any Let’s solve the first problem and make it accept any number of inputs. We need a sentinel value: let’s use 0. anyodd = False num = int(input(“Enter an int, 0 to quit. “)) while num != 0: if num % 2 == 1: anyodd = True If anyodd: print(“At least one number was odd.”) else: print(“no odd numbers found.”)

While loop with multiple exits It still asks for more numbers after an odd one was seen. Let’s fix that. Stop the loop if anyodd is True. It can never become False again. But we still want to stop the loop if the input is zero Stop the loop if anyodd is True or the input is 0. Continue the loop if anyodd is False and the input is not zero. deMorgan’s Law: “not (A or B)” = “(not A) and (not B)”

While loop example: any anyodd = False num = int(input(“Enter an int, 0 to quit. “)) while not anyodd and num != 0: if num % 2 == 1: anyodd = True else: # don’t ask if we’re going to quit num = int(input(“Enter an int, 0 to quit”)) if anyodd: print(“At least one odd number seen.”) else: print(“no odd numbers found.”) anyodd-2.py

Common errors with flags Accidentally using or instead of and The loop will run too long If the condition is a tautology, it’s an infinite loop Accidentally using and instead of or The loop won’t run long enough If the condition is a contradiction, doesn’t run at all Not initializing the flag Causes a run-time error Always setting the flag, every iteration Let’s see an example of that

Broken loop: unconditional flag anyodd = False num = int(input(“Enter an int, 0 to quit. “)) while num != 0: if num % 2 == 1: anyodd = True else: anyodd = False # BAD code!! num = int(input(“Enter int, 0 to quit. “)) If anyodd: print(“At least one number was odd.”) print(“no odd numbers found.”)

Broken loop: unconditional flag This version sets the flag every time through the loop So the flag won’t actually mean “are any numbers odd?” Instead, this version only cares about the last number. Seeing an even number shouldn’t change our answer at all!

Break – don’t do it! There is a keyword break which is a statement by itself. So syntax is simple, just break. The semantics is simple too – it must appear inside a loop and it causes the loop to exit immediately Example: for i in range(20): #it runs 20 times if i == 5: break print(i) What does this code actually print?

Break – don’t do it! Objections to this: Breaks the guarantee of structured programming One entrance, one exit This loop looks like it has TWO exits! It’s harder to read this code and be sure when the loop actually stops! Any loop should be documented at the top as to how many times it repeats or what the exit conditions Remember the while loop with two conditions It’s a bad habit to get into! It is NOT allowed in this class at all – for any reason.

Sentinel logic: recap Sentinel logic is repeating some code until you see a special value (or values) Get input both before the loop and at the bottom of the body of the loop “Enter a number or 0 to quit.” Keep asking until we see the sentinel 0 While the number is not zero… Inside the loop, process the (nonzero) number

Sentinel logic: recap In reverse: input validation Keep asking until we get what we want Now a good value makes us leave the loop While the number is not positive… Inside the loop, print an error message Process the valid input after the loop is over.