1 / 21

Computer Science 111

Computer Science 111. Fundamentals of Programming I The while Loop and Indefinite Loops . Another Example Problem. y = x.

tobias
Download Presentation

Computer Science 111

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Computer Science 111 Fundamentals of Programming I The while Loop and Indefinite Loops

  2. Another Example Problem y = x • Sir Isaac Newton developed a method to approximate the value of the square root of a given number. Suppose x is the number and guess is an approximation of the square root of x. Then a closer approximation to the actual square root of x is equal to • (guess + x / guess) / 2

  3. Another Example Problem • The approximation algorithm repeatedly replaces a guess with a better approximation. Write a program that allows the user to specify the value of x and the number of iterations used in this approximation. The program computes and displays the resulting estimate of the square root of x, as well as Python’s own estimate using Python’s math.sqrt function. Hint: the initial value of guess is x / 2.

  4. Using a for Loop import math x = float(input("Enter a number: ")) count = int(input("Enter the number of iterations: ")) guess = x / 2 for i in range(count): guess = (guess + x / guess) / 2 print("Guess: %f Actual: %f" % (guess, math.sqrt(x))) We perform a definite number of approximations

  5. Using a while Loop import math x = float(input("Enter a number: ")) count = int(input("Enter the number of iterations: ")) guess = x / 2 i = 1 while i <= count: guess = (guess + x / guess) / 2 i = i + 1 print("Guess: %f Actual: %f" % (guess, math.sqrt(x))) This loop is also count-controlled, and is equivalent in meaning to the for loop

  6. Syntax of the while Loop while <Boolean expression>: <statement-1> <statement-2> … <statement-n> loop header loop body A Boolean expression can be a comparison of two numbers or strings, using ==, !=, <, >, <=, >= These operations return the Boolean values True or False Note that == means equal to, whereas = means assignment

  7. Behavior of the while Loop Boolean expression False True Loop body while <Boolean expression>: # The condition <sequence of statements> # The loop body

  8. Logic of the while Loop loop control variable i = 1 while i <= count: guess = (guess + x / guess) / 2 i = i + 1 Before the loop header, the loop control variable must be set to the appropriate initial value Somewhere in the loop body, a statement must reset the loop control variable so that the Boolean expression eventually becomes False, to terminate the loop These steps were automatic in the for loop

  9. Extended Assignment The increment of a variable, such as x = x + 1 is so common that Python includes some shorthand for it x += 1 i = 1 while i <= count: guess = (guess + x / guess) / 2 i += 1

  10. Any Arithmetic Operation x = x + 1 x += 1 x = x - 1 x -= 1 x = x * 2 x *= 2 x = x / 2 x /= 2

  11. Which Loop Should I Use? • A for loop works well when the number of iterations is predictable (usually count-controlled) • A while loop works well when the number of iterations is not predictable • How could the # of iterations be unpredictable?

  12. Another Way to Look at Newton’s Method • We repeatedly improve the guess until the difference between the square of the guess and x reaches a given tolerance value. • tolerance = 0.00001 • while |guess2 - x| > tolerance • guess = (guess + x / guess) / 2 • We cannot predict how many times this process will be repeated • This is called an indefinite loop or a conditional iteration

  13. The while Loop import math x = float(input("Enter a number: ")) tolerance = 0.00001 guess = x / 2 while abs(guess ** 2 - x) > tolerance: guess = (guess + x / guess) / 2 print("Guess: %f Actual: %f" % (guess, math.sqrt(x))) Add a tolerance value and end the loop when the condition becomes false

  14. Sentinel-Controlled Loops • An indefinite loop can test for the presence of a special value called a sentinel • When the sentinel is reached, the loop should stop

  15. An Example Problem • Input test scores from the user and print the average score. • The user signals the end of input by simply pressing the enter or return key. • This value shows up as an empty string, which is the sentinel value.

  16. Sentinel-Controlled Loops sum = 0 count = 0 data = input("Enter a score or just return to quit ") while data != "": sum += int(data) count += 1 data = input("Enter a score or just return to quit ") if count == 0: print("No scores were entered") else: print("The average is", sum / count) The input statement must be written twice

  17. Simplify with a break Statement sum = 0 count = 0 while True: data = input("Enter a score or just return to quit ") if data == "": break sum += int(data) count += 1 if count == 0: print("No scores were entered") else: print("The average is", sum / count) break causes an immediate exit from the enclosing loop

  18. When Should I Use a break? • When the loop body executes at least once but the number of iterations is unpredictable • The condition of the enclosing while loop is just True • The condition for loop exit is placed in an enclosing if statement • A break may also be helpful within a for loop, but more on that at a later date . . .

  19. Input Checking redux rate = int(input('Enter the interest rate[0-100]: ')) if rate < 0 or rate > 100: print('ERROR: Rate must be between 0 and 100!') else: interest = principal * rate / 100 print('Your interest is', interest) We need to continue this process until the user enters a legitimate number

  20. Input Checking redux while True: rate = int(input('Enter the interest rate[0-100]: ')) if rate < 0 or rate > 100: print('ERROR: Rate must be between 0 and 100!') else: break interest = principal * rate / 100 print('Your interest is', interest) The loop controls the input process The computation process occurs only after the loop has finished

  21. For Monday Start Chapter 4

More Related