Ενότητα 3 - Τμήμα 1 - Επαναλήψεις - Loops

Ιστότοπος: ΕΛ/ΛΑΚ Moodle
Μάθημα: Εργαστήριο Python
Βιβλίο: Ενότητα 3 - Τμήμα 1 - Επαναλήψεις - Loops
Εκτυπώθηκε από: Guest user
Ημερομηνία: Πέμπτη, 21 Νοεμβρίου 2024, 10:01 PM

Περιγραφή

Μετά την ολοκλήρωση αυτής της ενότητας οι φοιτητές θα μπορούν να:

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


3.1.1 - Εύρος - Range

Τι είναι μία επανάληψη στον προγραμματισμό; Στον προγραμματισμό υπολογιστών, μία επανάληψη είναι μία σειρά εντολών που επαναλαμβάνονται συνεχώς μέχρι να μία συγκεκριμένη συνθήκη να ικανοποιηθεί.

Τι πρέπει να κάνουμε για να εμφανίσουμε 10 φορές το όνομα του καλύτερου μας φίλου; Θα μπορούσαμε να γράψουμε τον παρακάτω κώδικα 10 φορές:

print("My best friend's name is Nick") print("My best friend's name is Nick") print("My best friend's name is Nick") print("My best friend's name is Nick") print("My best friend's name is Nick") print("My best friend's name is Nick") print("My best friend's name is Nick") print("My best friend's name is Nick") print("My best friend's name is Nick") print("My best friend's name is Nick")


Αντί αυτού όμως μπορούμε να δώουμε εντολή στον υπολογιστή να επαναλάβει την εντολή 10 φορές.

Αρχικά πρέπει να μάθουμε  την εντολή range (εύρος). Όταν πληκτρολογούμε  range(10), η python δημιουργεί μία λίστα με αριθμούς, τους οποίους χρησιμοποιούμε για τις φορές που θα εκτελεστεί η επανάληψη με for.

Έτσι, το range(5) περιέχει 5 αριθμούς [0, 1, 2, 3, 4]. Στις γλώσσες προγραμματισμού για υπολογιστές το μέτρημα αρχίζει από το 0 (μηδέν).

Αν θέλετε να δείτε τι περιλαμβάνει μία εντολή range μπορείτε να γράψετε στην ακόλουθη εντολή στο χώρο εκτέλεσης εντολών του Thonny

>>> list(range(5))

Δοκιμάστε και το ακόλουθο και προσπαθήστε να καταλάβετε τι κάνει η range

>>> list(range(3,6))     # το αποτέλεσμα είναι [3, 4 , 5]

>>> list(range(9,16))   # το αποτέλεσμα είναι [9, 10 , 11, 12, 13, 14, 15]

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

Αν εξαλείψουμε τον πρώτο αριθμός έχουμε το ίδιο αποτέλεσμα με το να γράφαμε μηδέν

>>> list(range(5)) # είναι το ίδιο με 

>>> list(range(0,5))

Τι άλλο μπορούμε να κάνουμε με τη range; Να αλλάξουμε το βήμα.

δοκιμάστε την ακόλουθη εντολή

>>> list(range(2,20,3))

Η πρώτη τιμή είναι το 2, η επόμενη είναι το 5 (2+3), η επόμενη είναι το 8 (5+3) .... και η τελευταία είναι το 17, το 20 δεν περιλαμβάνεται στη λίστα)

Ως άσκηση δοκιμάστε τον ακόλουθο κώδικα και πριν την εκτέλεση του προβλέψτε το αποτέλεσμα:

>>> list(range(1,9,2))

>>> list(range(7))

>>> list(range(7,17,4))

Σαν άσκηση γράψτε μία εντολή range που έχει 10 αριθμούς.
Φυσικά η ευκολότερη εκδοχή είναι η range(10). Εμφανίστε τα περιεχόμενα της με την εντολή:

>>> list(range(10))

3.1.2 - Επανάληψη με For

Πότε χρησιμοποιούμε μία επανάληψη; Όταν θέλουμε να επαναλάβουμε ένα τμήμα κώδικα. Η επανάληψη με for χρησιμοποιείτε όταν ξέρουμε το πόσες φορές επιθυμούμε να εκτελεστεί ο κώδικας μας. Αντιγράψτε τον ακόλουθο κώδικα στην περιοχή προγράμματος στο Thonny's  και αποθηκεύστε το (save as) σαν  "Loops". Για να δείτε την εκτέλεση βήμα-βήμα μπορείτε να πατήσετε το κουμπί Debug, και μετά το κουμπί Step into (F7) και τέλος το κουμπί Step over(F6). Κοιτάξτε προσεκτικά τις τιμές της μεταβλητής x στο δεξί τμήμα του παραθύρου του Thonny.

for i in range(10): print("I will not chew gum in class.")


Επίσης δοκιμάστε το ακόλουθο:

for i in range(5): print("Please,") print("Can I go to the mall?")


και αλλάξτε το σε:

for i in range(5): print("Please,") print("Can I go to the mall?")


Δοκιμάστε τον ακόλουθο κώδικα και προσπαθήστε να εξηγήσετε το σκοπό του:

for i in range(10): print (i, "* 5 =", i*5)


Έχετε κάποια ιδέα για το πως μπορούμε το κάνουμε καλύτερο; Δοκιμάστε αυτό τώρα:

for i in range(1,11): print (i, "* 5 =", i*5)


και τώρα αυτό:

number = int(input("Please write a number for 1 to 10 : ")) for i in range(1,11): print (i, "* ",number," =", i*number)

3.1.3 - Εμφωλευμένες επαναλήψεις με for

Δοκιμάστε να προβλέψετε το τι θα εμφανίσει ο παρακάτω κώδικας. Μετά δοκιμάστε τον και δείτε αν είχατε δίκιο.

# What does this code prints? Why? for i in range(3): print("a") for j in range(3): print("b")

Το επόμενο τμήμα κώδικα είναι σχεδόν ίδιο με το παραπάνω. Η δεύτερη επανάληψη με for έχει στοιχηθεί 4 θέσεις πιο δεξιά ( 1tab) και τώρα είναι εμφωλευμενη μέσα στην πρώτη επανάληψη for. Αυτό αλλάζει δραματικά την εκτέλεση του κώδικα. Δοκιμάστε να δείτε.

# What does this code prints? Why? for i in range(3): print("a") for j in range(3): print("b")


Τώρα δοκιμάστε να φτιάξετε ένα πρόγραμμα που θα έχει ως έξοδο:

Παράδειγμα εμφωλευμένω επαναλήψεων
1
a
a
a
a
2
a
a
a
a
3
a
a
a

Εδώ μπορείτε να βρείτε μία λύση για το πρόβλημα.

3.1.4 - Υπολογίζοντας ένα άθροισμα

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

print ("Calculation of the total of 5 numbers") total = 0 for i in range(5): new_number = int(input("Enter a number: " )) total = total + new_number # or you can write total += new_number print("The total is: ", total)


Πως μπορούμε να υπολογίσουμε το άθροισμα των αριθμών 1+2+3+4+5+6+7+8+9+ ...... + 1000; Ποιο είναι το εύρος (range) αυτών των αριθμών; Είναι το range(1000) ή το range (1,1001); Τι νομίζετε; Αν δεν θυμάστε προσπαθήστε να βρείτε το πως εμφανίζουμε ένα range. Φυσικά είστε ελεύθεροι να σκεφτείτε κάτι διαφορετικό 

Οι σχετικές εντολές είναι:

>>> list(range(1000))

και 

>>> list(range(1,1001))

Μία λύση για το πρόβλημα:

print ("Calculation of the Sum of the 1000 first numbers") total = 0 for i in range(1,1001): # or you can use range(1000) and add (i+1) to the total total = total + i # or you can write total += i or total += i+1 print("The total is: ", total)


Και τι νομίζετε ότι κάνει το ακόλουθο πρόγραμμα;
print ("What this program does?") total = 0 for i in range(2,100,2): # print ("The temporary total is : ", total) # print ("The number i am going to add to the temporary total is :", i) total += i # print ("The temporary total after the addition of ",i, "is :", total) # print() print("The final total is: ", total)


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

Αυτό το πρόγραμμα υπολόγισε το άθροισμα των ζυγών αριθμών μεταξύ του 0 και του 100 (το 100 δεν περιλαμβάνεται). Μπορείτε να το αλλάξετε έτσι ώστε να υπολογίζει το άθροισμα των μονών αριθμών από το 1 μέχρι το 99;  Χρειάζεται να αλλάξετε μόνο ένα αριθμό, αλλά μπορείτε να βρείτε μία δική σας λύση. Το αποτέλεσμα είναι 2500.