Σημειώσεις

Προηγούμενο

Επόμενο

Ανακύκλωση με την εντολή while

Η εντολή while εκκινεί μία επαναληπτική διαδικασία και το συντακτικό της είναι


while condition:
    statements

Οι εντολές (statements) οι οποίες βρίσκονται μετά την while και εντός εσοχής είναι οι εντολές οι οποίες, αποτελούν μέρος της ομάδας εντολών του while και εκτελούνται επαναληπτικά. Οι εντολές statements εκτελούνται εφόσον η έκφραση condition είναι αληθής. Επαναλαμβάνουμε ότι ο τρόπος ομαδοποίησης των εντολών ανακύκλωσης statements είναι η εσοχή, όπως ήδη έχουμε δει και για την εντολή if.

Παράδειγμα.

Εισάγετε έναν ακέραιο m και τυπώστε σε διαδοχικές γραμμές τους ακεραίους από το 0 έως τον m.

m = int(input("Give a positive integer: "))
i = 0
while i <= m:
   print(i)
   i = i + 1

Παράδειγμα.

Η κυβική ρίζα κάποιων αριθμών είναι ακέραιος και οι αριθμοί αυτοί ονομάζονται τέλειοι κύβοι. Θα βρούμε την κυβική ρίζα τέλειου κύβου με τη μέθοδο της εξαντλητικής απαρίθμησης (δηλαδή ελέγχοντας διαδοχικά του ακεραίους που μπορεί να είναι ρίζες).


perfect_cube = 216   # this is a perfect cube
x = 0
while x**3 <= perfect_cube:
   x = x + 1
   if x**3 == perfect_cube:
      print(x,"is the cubic root of",perfect_cube)

Ένα πιο αναλυτικό πρόγραμμα είναι το εξής.


perfect_cube = 216   # this is a perfect cube
x = 0
while x**3 <= perfect_cube:
   x = x + 1
   if x**3 < perfect_cube:
      print("No,", x,"is not the cubic root of",perfect_cube)
   elif x**3 == perfect_cube:
      print("Yes, indeed!", x,"is the cubic root of",perfect_cube)

Οι συμβολοσειρές αποτελούν σειρές χαρακτήρων και μπορούμε να τις διατρέξουμε με μία επαναληπτική διαδικασία.

Παράδειγμα.

Ας δούμε πώς μπορούμε να διατρέξουμε έναν-έναν τους χαρακτήρες μιας συμβολοσειράς.


s = input("Give a string: ")
i = 0
while i < len(s):
    print(i,"character is",s[i])
    i = i + 1

Παρατήρηση.

η εντολή i += 1 είναι ισοδύναμη με την i = i + 1. Γενικότερα, η x += y είναι ισοδύναμη με την x = x + y. Επίσης υπάρχουν και οι τελεστές -=, *=, /=, //=. **= με ανάλογες σημασίες. Το προηγούμενο πρόγραμμα γράφεται ως


s = input("Give a string: ")
i = 0
while i < len(s):
    print(i,"character is",s[i])
    i += 1

Εντολές break, continue

Εντολή break.

Μπορούμε να τερματίσουμε μία ανακύκλωση πρόωρα με την εντολή break.

Παράδειγμα.

Θα ελέγξουμε ένα string για να εντοπίσουμε αν περιέχει ένα γράμμα ο και σε ποια θέση βρίσκεται αυτό.


s = input("Give a string: ")
i = 0
while i < len(s):
    if s[i] == 'o':
        print("The character o is in position",i)
        break
    i = i + 1
    if i == len(s):
        print("There is no o in the word", s)

Παράδειγμα.

Μπορούμε να βελτιώσουμε το πρόγραμμα που βρίσκει την κυβική ρίζα τέλειου κύβου με τη μέθοδο της εξαντλητικής απαρίθμησης, χρησιμοποιώντας την break. Η ανακύκλωση θα διακόπτεται μόλις βρεθεί η κυβική ρίζα.


pc = int(input("Give a positive integer: "))
x = 0
while x**3 <= pc:
   x = x + 1
   x3 = x**3
   if x3 < pc:
      print("No,", x,"is not the cubic root of",perfect_cube)
   elif x3 == pc:
      print("Yes, indeed!", x,"is the cubic root of",perfect_cube)
      break

Ατέρμονη ανακύκλωση.

Μπορούμε να παραγάγουμε ατέρμονη ανακύκλωση αν στη θέση της συνθήκης στην while βάλουμε την boolean σταθερά True. Η εντολή break είναι απαραίτητη στις ατέρμονες ανακυκλώσεις.

Παράδειγμα.

Θα ζητήσουμε από τον χρήστη να εισάγει έναν αριθμό από το 1 έως το 100 και θα επαναλαμβάνουμε την προτροπή εάν ο χρήστης δίνει αριθμούς εκτός αυτού του διαστήματος.


while True:
    x = int(input("Input a number between 1 and 100: "))
    if  x >= 1 and x <= 100:
        break
print("Well done!")

Παράδειγμα.

Μπορούμε να γράψουμε το πρόγραμμα που βρίσκει την κυβική ρίζα τέλειου κύβου με τη μέθοδο της εξαντλητικής απαρίθμησης, χρησιμοποιώντας ατέρμονη ανακύκλωση. Η ανακύκλωση θα διακόπτεται μόλις βρεθεί η κυβική ρίζα ή όταν διαπιστωθεί ότι δεν υπάρχει τέτοια.


pc = int(input("Give a positive integer: "))
x = 0
x3 = x**3
while x3 <= pc:
   x = x + 1
   x3 = x**3
   if x3 == pc:
      print(x,"is the cubic root of",perfect_cube)
      break
    elif x3 > pc:
      print(pc,"is not a perfect cube")
      break

Εντολή continue.

Στην εντολή continue η τρέχουσα ανακύκλωση διακόπτεται (οι επόμενες εντολές δεν εκτελούνται) και ο έλεγχος του προγράμματος πηγαίνει στην θέση της εντολής while. H ανακύκλωση επαναλαμβάνεται από εκείνο το σημείο.

Παράδειγμα.

Θα εισαγάγουμε αριθμούς στο πρόγραμμα και θα βρούμε το άθροισμα των πρώτων 10 θετικών αριθμών (αγνοώντας τους μη-θετικούς).


iter = 0
summ = 0
while iter < 10:
    x = int(input('Enter a positive integer: '))
    if x <= 0:
       continue
    summ = summ + x
    iter = iter + 1
print('The sum of the positive numbers is', sum)

Μελέτη

Βιβλιογραφία

  1. J.V. Guttag, Υπολογισμοί και προγραμματισμός με την python (Κεφάλαιο 5).
  2. Δημήτριος Καρολίδης, Μαθαίνετε εύκολα python (Παράγραφοι 4.1, 4.2) (Εκδόσεις Καρολίδη, 2016).
  3. Κ. Μαγκούτης, Χ. Νικολάου, Εισαγωγή στον αντικειμενοστραφή προγραμματισμό με Python, (Αποθετήριο "Κάλλιπος", 2016) - Κεφάλαιο 5. Επανάληψη με την εντολή while.