Μετάβαση στο περιεχόμενο

Python: επανάληψη

for και while, και οι κλασικοί αλγόριθμοι: μέτρηση, άθροισμα, μέγιστο.

40 λεπτά

Θα μάθεις να

  1. Να χρησιμοποιείς τον βρόχο for με τη range(), και να ξέρεις ότι το τέλος δεν περιλαμβάνεται.
  2. Να χρησιμοποιείς τον βρόχο while και να εξασφαλίζεις ότι τερματίζει.
  3. Να εφαρμόζεις τους κλασικούς αλγορίθμους: μέτρηση, άθροισμα, μέσος όρος, μέγιστο και ελάχιστο.
  4. Να συμπληρώνεις πίνακα τιμών για έναν βρόχο.

Γιατί χρειαζόμαστε επανάληψη

Για να εμφανίσεις τους αριθμούς από το 11 ως το 55 αρκούν πέντε print. Για το 11 ως το 10001000 όχι. Η δομή επανάληψης (βρόχος, loop) εκτελεί ένα μπλοκ εντολών ξανά και ξανά, και είναι αυτό που κάνει τον υπολογιστή χρήσιμο: δεν βαριέται την εκατοστή φορά.

Η Python έχει δύο βρόχους:

ΒρόχοςΧρησιμοποιείται όταν
forξέρεις από πριν πόσες φορές, ή θέλεις να περάσεις από κάθε στοιχείο μιας σειράς
whileεπαναλαμβάνεις όσο ισχύει μια συνθήκη, χωρίς να ξέρεις πόσες φορές θα χρειαστεί

Ο βρόχος for και η range()

for i in range(1, 6):
    print(i, i * i)
1 1
2 4
3 9
4 16
5 25

Η μεταβλητή i παίρνει με τη σειρά κάθε τιμή που δίνει η range(), και για κάθε μία εκτελείται το μπλοκ με την εσοχή. Όπως στο if, η γραμμή τελειώνει με :.

Η range() έχει τρεις μορφές:

ΚλήσηΤιμέςΠλήθος
range(5)0, 1, 2, 3, 455
range(1, 6)1, 2, 3, 4, 555
range(10, 0, -2)10, 8, 6, 4, 255

Ο βρόχος while

n = 1
while n < 100:
    n = n * 2
print(n)
128

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

Ο while ταιριάζει όταν δεν ξέρεις πόσα δεδομένα θα έρθουν. Ένα συνηθισμένο σχήμα: διαβάζεις αριθμούς μέχρι ο χρήστης να δώσει 00, που λειτουργεί ως τιμή τερματισμού (φρουρός, sentinel):

total = 0
x = int(input())
while x != 0:
    total = total + x
    x = int(input())
print(total)
49

Με είσοδο 1212, 77, 3030 και 00, εμφανίζεται 4949. Πρόσεξε ότι η input() γράφεται δύο φορές: μία πριν από τον βρόχο, για τον πρώτο έλεγχο, και μία στο τέλος του μπλοκ, για τον επόμενο. Αν ο χρήστης δώσει 00 αμέσως, ο βρόχος δεν εκτελείται και εμφανίζεται 00.

Οι κλασικοί αλγόριθμοι

Τέσσερα μοτίβα εμφανίζονται ξανά και ξανά. Όλα έχουν την ίδια δομή: αρχική τιμή πριν από τον βρόχο, ενημέρωση μέσα, αποτέλεσμα μετά.

Στα παραδείγματα οι βαθμοί είναι γραμμένοι σε λίστα, ανάμεσα σε αγκύλες. Το for g in grades: περνά από κάθε βαθμό με τη σειρά. Οι λίστες είναι το θέμα του επόμενου μαθήματος.

Άθροισμα και μέσος όρος

grades = [14, 18, 9, 18, 16]
total = 0
for g in grades:
    total = total + g
print(total, total / len(grades))
75 15.0

Το total ξεκινά από 00, το ουδέτερο στοιχείο της πρόσθεσης. Η len(grades) δίνει το πλήθος των στοιχείων, εδώ 55.

Μέτρηση

grades = [14, 18, 9, 18, 16]
count = 0
for g in grades:
    if g >= 15:
        count = count + 1
print(count)
3

Ο μετρητής αυξάνεται κατά 11 κάθε φορά που ένα στοιχείο ικανοποιεί τη συνθήκη. Είναι το άθροισμα, μόνο που προσθέτεις 11 αντί για την τιμή.

Μέγιστο και ελάχιστο

grades = [14, 18, 9, 18, 16]
best = grades[0]
for g in grades:
    if g > best:
        best = g
print(best)
18

Το grades[0] είναι το πρώτο στοιχείο της λίστας. Το μέγιστο ξεκινά από εκεί: «ο καλύτερος που έχω δει μέχρι στιγμής είναι ο πρώτος». Κάθε επόμενος που είναι μεγαλύτερος τον αντικαθιστά. Για το ελάχιστο αλλάζει μόνο η σύγκριση, σε g < worst.

Πίνακας τιμών για το μέγιστο

Αρχικά best = 14. Πες αν η σύγκριση είναι αληθής πριν πατήσεις.

Βήμαgg > bestbest
Ζωντανή ενημέρωση

Λυμένα παραδείγματα

Παράδειγμα 1

Πόσες φορές εκτελείται το σώμα του for i in range(3, 15, 4) και ποιες τιμές παίρνει το i;

Δοκίμασέ το πρώτα. Μετά δες τη λύση.

Παράδειγμα 2

Γράψε πρόγραμμα που βρίσκει τον μέσο όρο μόνο των θετικών αριθμών μιας λίστας, π.χ. της [4, -2, 10, 0, 7].

Δοκίμασέ το πρώτα. Μετά δες τη λύση.

Παράδειγμα 3

Ποιο είναι το μικρότερο n για το οποίο το άθροισμα 1 + 2 + … + n ξεπερνά το 50;

Δοκίμασέ το πρώτα. Μετά δες τη λύση.

Ασκήσεις

Πρώτα ερωτήσεις με επιλογές: διαλέγεις, πατάς «Έλεγξε» και μαθαίνεις αμέσως αν το βρήκες και γιατί. Στο τέλος, λίγες ασκήσεις χωρίς επιλογές — εκεί κρύβεται μόνο η απάντηση.

Πολλαπλή επιλογήΆσκηση 1 από 14
Ποιες τιμές δίνει η range(1, 5);

Τα κατάφερες;

  • Να χρησιμοποιείς τον βρόχο for με τη range(), και να ξέρεις ότι το τέλος δεν περιλαμβάνεται.
  • Να χρησιμοποιείς τον βρόχο while και να εξασφαλίζεις ότι τερματίζει.
  • Να εφαρμόζεις τους κλασικούς αλγορίθμους: μέτρηση, άθροισμα, μέσος όρος, μέγιστο και ελάχιστο.
  • Να συμπληρώνεις πίνακα τιμών για έναν βρόχο.

Λύσε τις ασκήσεις πιο πάνω και θα δεις εδώ πού στέκεσαι.