Loop Structures in Python Programming

 
15-110: Principles of
Computing
 
Loop Structures- Part III
Lecture 9, September 30, 2018
 
Mohammad Hammoud
Carnegie Mellon University in Qatar
 
Today…
 
Last Session:
Loop Structures- Part II
 
Today’s Session:
Loop Structures- Part III:
While Statement
Nested Loops
Various Examples
 
Announcements:
HA3 will be out by tonight; it is due on Saturday Oct 6 by 11:00AM
Quiz I is on Sunday Oct 7
 
 
Suppose we want to write a program that computes and outputs the
n
th Fibonacci number, where 
n
 is a value entered by a user
 
The Fibonacci sequence starts with 0 and 1
 
After these first two numbers, each number in the sequence is
computed as simply the sum of the previous two numbers
E.g., 
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …
 
 
 
 
 
 
Recap: Fibonacci Sequence
 
Recap: Fibonacci Sequence
def fibonacci(n):
    f_i = 0
    f_j = 1
    print(f_i, f_j, end = " ")
    for k in range(2, n+1):
        f_new = f_i + f_j
        print(f_new, end = " ")
        f_i = f_j
        f_j = f_new
 
Recap: Fibonacci Sequence
n = eval(input("Enter a number that is larger than 1 >> "))
if n < 2:
    print("You can only enter a number that is larger than 1!")
else:
    fibonacci(n)
 
So far, we have considered only the case where the number of
iterations is determined before the loop starts
This kind of loops is called 
definite loops 
and 
for
 is used in Python
to write definite loops
 
But, what if we want to write loops, wherein we do not know the
number of iterations beforehand?
This kind of loops is denoted as 
indefinite loops
 
 
 
 
 
 
 
Definite Loops vs. Indefinite Loops
 
In Python, an indefinite loop is implemented using a while statement
 
 
 
<condition> 
is a Boolean expression, just like in if statements
 
<body> 
is, as usual, a sequence of one or more statements
 
 
 
 
 
 
 
The While Statement
 
while <condition>:
 
<body>
The Flowchart of a While Loop
Is <condition>
True?
 
No
 
Yes
<body>
 
Here is how we have done it before:
 
 
 
 
 
 
 
Revisiting Average of a Series of Numbers
def main():
    n = eval(input("How many numbers do you have? "))
    sum = 0.0
 
    for i in range(n):
        x = eval(input("Enter a number >> "))
        sum = sum + x
 
    print("\nThe average of the numbers is", sum/n)
 
main()
 
Here is how we can do it now using a while statement:
 
 
 
 
 
 
 
Revisiting Average of a Series of Numbers
sum = 0.0
n = eval(input("How many numbers do you have? "))
count = 0
while count < n:
    x = eval(input("Enter a number >> "))
    sum = sum + x
    count = count + 1
print("The average of the " + str(n) + " numbers you entered is ", sum/n)
 
Here is also another version that assumes no prior knowledge about
the quantity of numbers the user will input
 
 
 
 
 
 
Revisiting Average of a Series of Numbers
sum = 0.0
count = 0
moreData = "yes"
while moreData == "yes":
    x = eval(input("Enter a number >> "))
    sum = sum + x
    count = count + 1
    moreData = input("Do you have more numbers (yes or no)? ")
 
print("The average of the " + str(count) + " numbers you entered is ", sum/count)
 
Suppose we want to print the odd numbers between two user-input
numbers (inclusive), say, 
start
 and 
end
 
The program assumes some conditions, whereby the 
start
 and 
end
numbers shall be positive and 
end
 should be always greater than 
start
 
Hence, we should 
continue
 prompting the user for the correct input
before proceeding with printing the odd numbers
This process is typically called 
input validation
Well-engineered programs should validate inputs whenever possible!
 
 
 
 
 
 
 
Printing Odd Numbers With Input Validation
 
Printing Odd Numbers With Input Validation
1.  while True:
2.     start = eval(input("Enter start number: "))
3.     end = eval(input("Enter end number: "))
4.     if start >=0 and end >= 0 and end > start:
5.         
break
6.     else:
7.         print("Please enter positive numbers, with end being greater than start")
8.
9.  for i in range(start, end + 1):
10.     if i % 2 == 0:
11.         
continue
12.     print(i, end = " ")
It breaks the loop; execution continues at line 8.
It skips one iteration in the loop; execution 
continues back at line 9.
 
Like the if statement, loops can also be nested to produce
sophisticated algorithms
Example
: Write a program that prints the following rhombus shape
 
 
 
 
 
Nested Loops
One way (
not necessarily the best way!
) to think about this problem is to
assume that the stars are within a matrix with equal rows and columns
The Rhombus Example
Can you figure
out the different
relationships
between rows
and columns?
 
One way (
not necessarily the best way!
) to think about this problem is to
assume that the stars are within a matrix with equal rows and columns
 
 
 
 
 
 
The Rhombus Example
 
Print a star when:
1)
Row + Column == 6
2)
Row + Column == 14
3)
Row – Column == 4
4)
Column – Row == 4
The Rhombus Example
for i in range(1, 10):
    for j in range(1, 10):
        if ((i+j== 6) or (j-i==4) or (i+j == 14) or (i-j==4)):
            print("*", end = "")
        else:
            print(" ", end = "")
    print()
Here is one way of writing the program in Python
Can you generalize this code?
 
The Rhombus Example
 
What are 6, 14, 4, and 4 below?
 
 
 
 
 
 
Print a star when:
1)
Row + Column == 6
2)
Row + Column == 14
3)
Row – Column == 4
4)
Column – Row == 4
 
The Rhombus Example
 
What are 6, 14, 4, and 4 below?
 
 
 
 
 
The Rhombus Example: A More General Version
while True:
    rows = eval(input("Enter number of rows: "))
    columns = eval(input("Enter number of columns: "))
 
    if rows != columns or rows % 2 != 1 or columns % 2 != 1:
        print("Please enter odd and equal rows and columns")
    else:
        break
 
rows = abs(rows)
columns = abs(columns)
The Rhombus Example: A More General Version
for i in range(1, rows+1):
    for j in range(1, columns+1):
        if ((i+j== (columns//2 +2)) or (j-i==(columns//2)) or (i+j ==
(columns+ math.ceil(rows/2))) or (i-j==(columns//2))):
            print("*", end = "")
        else:
            print(" ", end = "")
    print()
 
Next Lecture…
 
Problem Solving
 
 
 
 
Slide Note
Embed
Share

This lecture covers Loop Structures, specifically focusing on the while statement and nested loops in Python programming. It discusses the Fibonacci sequence and demonstrates how to write a program to compute the nth Fibonacci number. Additionally, it explains the difference between definite and indefinite loops, highlighting the implementation of indefinite loops using the while statement.

  • Python Programming
  • Loop Structures
  • Fibonacci Sequence
  • Indefinite Loops
  • While Statement

Uploaded on Aug 03, 2024 | 3 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. 15-110: Principles of Computing Loop Structures- Part III Lecture 9, September 30, 2018 Mohammad Hammoud Carnegie Mellon University in Qatar

  2. Today Last Session: Loop Structures- Part II Today s Session: Loop Structures- Part III: While Statement Nested Loops Various Examples Announcements: HA3 will be out by tonight; it is due on Saturday Oct 6 by 11:00AM Quiz I is on Sunday Oct 7

  3. Recap: Fibonacci Sequence Suppose we want to write a program that computes and outputs the nth Fibonacci number, where n is a value entered by a user The Fibonacci sequence starts with 0 and 1 After these first two numbers, each number in the sequence is computed as simply the sum of the previous two numbers E.g., 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,

  4. Recap: Fibonacci Sequence def fibonacci(n): f_i = 0 f_j = 1 print(f_i, f_j, end = " ") for k in range(2, n+1): f_new = f_i + f_j print(f_new, end = " ") f_i = f_j f_j = f_new

  5. Recap: Fibonacci Sequence n = eval(input("Enter a number that is larger than 1 >> ")) if n < 2: print("You can only enter a number that is larger than 1!") else: fibonacci(n)

  6. Definite Loops vs. Indefinite Loops So far, we have considered only the case where the number of iterations is determined before the loop starts This kind of loops is called definite loops and for is used in Python to write definite loops But, what if we want to write loops, wherein we do not know the number of iterations beforehand? This kind of loops is denoted as indefinite loops

  7. The While Statement In Python, an indefinite loop is implemented using a while statement while <condition>: <body> <condition> is a Boolean expression, just like in if statements <body> is, as usual, a sequence of one or more statements

  8. The Flowchart of a While Loop No Is <condition> True? Yes <body>

  9. Revisiting Average of a Series of Numbers Here is how we have done it before: def main(): n = eval(input("How many numbers do you have? ")) sum = 0.0 for i in range(n): x = eval(input("Enter a number >> ")) sum = sum + x print("\nThe average of the numbers is", sum/n) main()

  10. Revisiting Average of a Series of Numbers Here is how we can do it now using a while statement: sum = 0.0 n = eval(input("How many numbers do you have? ")) count = 0 while count < n: x = eval(input("Enter a number >> ")) sum = sum + x count = count + 1 print("The average of the " + str(n) + " numbers you entered is ", sum/n)

  11. Revisiting Average of a Series of Numbers Here is also another version that assumes no prior knowledge about the quantity of numbers the user will input sum = 0.0 count = 0 moreData = "yes" while moreData == "yes": x = eval(input("Enter a number >> ")) sum = sum + x count = count + 1 moreData = input("Do you have more numbers (yes or no)? ") print("The average of the " + str(count) + " numbers you entered is ", sum/count)

  12. Printing Odd Numbers With Input Validation Suppose we want to print the odd numbers between two user-input numbers (inclusive), say, start and end The program assumes some conditions, whereby the start and end numbers shall be positive and end should be always greater than start Hence, we should continue prompting the user for the correct input before proceeding with printing the odd numbers This process is typically called input validation Well-engineered programs should validate inputs whenever possible!

  13. Printing Odd Numbers With Input Validation 1. while True: 2. start = eval(input("Enter start number: ")) 3. end = eval(input("Enter end number: ")) 4. if start >=0 and end >= 0 and end > start: 5. break 6. else: 7. print("Please enter positive numbers, with end being greater than start") 8. 9. for i in range(start, end + 1): 10. if i % 2 == 0: 11. continue 12. print(i, end = " ") continues back at line 9. It breaks the loop; execution continues at line 8. It skips one iteration in the loop; execution

  14. Nested Loops Like the if statement, loops can also be nested to produce sophisticated algorithms Example: Write a program that prints the following rhombus shape * * * * * * * * * * * * * * * *

  15. The Rhombus Example One way (not necessarily the best way!) to think about this problem is to assume that the stars are within a matrix with equal rows and columns 1 2 3 4 5 6 7 8 9 1 * 2 * * Can you figure out the different relationships between rows and columns? 3 * * 4 * * 5 * * 6 * * 7 * * 8 * * 9 *

  16. The Rhombus Example One way (not necessarily the best way!) to think about this problem is to assume that the stars are within a matrix with equal rows and columns 1 2 3 4 5 6 7 8 9 1 * 2 * * Print a star when: 1)Row + Column == 6 2)Row + Column == 14 3)Row Column == 4 4)Column Row == 4 3 * * 4 * * 5 * * 6 * * 7 * * 8 * * 9 *

  17. The Rhombus Example Here is one way of writing the program in Python for i in range(1, 10): for j in range(1, 10): if ((i+j== 6) or (j-i==4) or (i+j == 14) or (i-j==4)): print("*", end = "") else: print(" ", end = "") print() Can you generalize this code?

  18. The Rhombus Example What are 6, 14, 4, and 4 below? 1 2 3 4 5 6 7 8 9 1 * 2 * * Print a star when: 1)Row + Column == 6 2)Row + Column == 14 3)Row Column == 4 4)Column Row == 4 3 * * 4 * * 5 * * 6 * * 7 * * 8 * * 9 *

  19. The Rhombus Example What are 6, 14, 4, and 4 below? 1 2 3 4 5 6 7 8 9 1 * 2 * * Print a star when: 1)Row + Column == 6 (i.e., Columns/2 +2) 2)Row + Column == 14 (i.e., Columns + ????/? ) 3)Row Column == 4 (i.e., Columns/2) 4)Column Row == 4 (i.e., Columns/2) 3 * * 4 * * 5 * * 6 * * 7 * * 8 * * 9 *

  20. The Rhombus Example: A More General Version while True: rows = eval(input("Enter number of rows: ")) columns = eval(input("Enter number of columns: ")) if rows != columns or rows % 2 != 1 or columns % 2 != 1: print("Please enter odd and equal rows and columns") else: break rows = abs(rows) columns = abs(columns)

  21. The Rhombus Example: A More General Version for i in range(1, rows+1): for j in range(1, columns+1): if ((i+j== (columns//2 +2)) or (j-i==(columns//2)) or (i+j == (columns+ math.ceil(rows/2))) or (i-j==(columns//2))): print("*", end = "") else: print(" ", end = "") print()

  22. Next Lecture Problem Solving

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#