Μάθημα : Σχεδιασμός γραφικών ASCII με την εντολή for
Κωδικός : 3701020536
3701020536 - ΑΠΟΣΤΟΛΟΣ ΣΥΡΟΠΟΥΛΟΣ
Περιγραφή Μαθήματος
Δημιουργία απλών γραφικών ASCII χρησιμοποιώντας μία ή περισσότερες εντολές for.
-
Περιεχόμενο μαθήματος
Τα γραφικά ASCII είναι σχήματα και εικόνες που δημιουργούνται σε ένα απλό αρχείο κειμένου (text file) με τη χρήση κύρια των αγγλικών γραμμάτων και των λοιπών συμβόλων που υπάρχουν σε ένα απλό πληκτρολόγιο. Πριν την εφεύρεση των γραφικών οθονών, οι οποίες είναι κοινώς τόπος σήμερα, οι άνθρωποι χρησιμοποιούσαν τερματικά όπως αυτό που φαίνεται στην εικόνα που ακολουθεί.
Έστω ότι θέλουμε να δημιουργήσουμε μια απλή εικόνα ASCII όπως αυτή που ακολουθεί γράφωντας ένα απλό πρόγραμμα σε Python.
* ** *** **** ***** ****** ******* ******** ********* ********** *********** ************ ************* ************** *************** **************** ***************** ****************** ******************* ********************
Αυτή η εικόνα αποτελείται από 20 γραμμές, η τελευταία γραμμή αποτελείται από 20 αστεράκια (*), η πρώτη αποτελείται από 1 και όλες οι άλλες γραμμές έχουν ένα αστεράκι παραπάνω από την ακριβώς προηγούμενη γραμμή. Για να δημιουργήσουμε αυτή την εικόνα, θα πρέπει να λύσουμε δύο απλά προβλήματα:
- Πως θα τυπώσουμε, ας πούμε, k διαδοχικά αστεράκια;
- Πως θα δημιουργήσουμε το τελικό σχήμα;
Για να λύσουμε το πρώτο πρόβλημα μποορύμε να χρησιμοποιήσουμε μια εντολή for όπως αυτή που ακολουθεί:
>>> for k in range(1,11): print("*", end="") ********** >>>Εδώ χρησιμοποιύμε την παράμετρο end της λειτουργίας print. Σε κανονικές συνθήκες η λειτουργία τυπώνει τα ορίσματα της (αυτά που γράφουμε αναάμεσα στις παρενθέσεις) και στο τέλος αλλάζει γραμμή. Αν δώσουμε τιμή σε αυτή την παράμετρο, τότε η συμβολοσειρά που είναι η τιμή της εμφανίζεται στο τέλος της εκτύπωσης, χωρίς να υπάρχει αλλαγή γραμμής. Το παρακάτω απλό παράδειγμα δείχνει τη διαφορά.
>>> print("A"); print("B") A B >>> print("A",end=" "); print("B") A B >>>Ένας απλούστερος τρόπος να λύσουμε το πρώτο πρόβλημα είναι με τη χρήση του πολλαπλασιασμού συμβολοσειράς με ακέραιο αριθμό. Πιο συγκεκριμένα, αν έχουμ μια συμβολοσειρά S, τότε η παράσταση S * n, όπου n μια μεταβλητή στην οποία έχουμε αποθηκεύσει έναν ακέραιο αριθμό ή απλά ένας ακέραιος αριθμός, θα δημιουργήσει μια νέα συμβολοσειρά που θα αποτελείται από n αντίγραφα της S , το ένα δίπλα στο άλλο.. Παρακάτω δίνονται δύο παραδείγματα για να γίνει πλήρως κατανοητό τι εννοούμε.
>>> "*" * 10 '**********' >>> "tato " * 5 'tato tato tato tato tato ' >>>
Έχοντας λύσει το πρώτο πρόβλημα, η λύση του δευτέρου είναι απλή: Θα τυπώσουμε 20 γραμμές όπου η κάθε θα αποτελείται από n αστεράκια, όπου το n θα πάρει τις τιμές 1, 2, 3,…, 20. Προφανώς όλα δείχνουν ότι θα πρέπει να χρησιμοποιήσουμε μια εντολή for για να λύσουμε και το δεύτερο πρόβλημα, όπως δείχνει ο κώδικας που ακολουθεί.
>>> for n in range(1,21): print("*" * n) * ** *** **** ***** ****** ******* ******** ********* ********** *********** ************ ************* ************** *************** **************** ***************** ****************** ******************* ******************** >>>Εδώ οι τελείες λειτουργούν ως αποσιωπητικά. Ας δούμε τώρα πως μποορύμε να δημιουργήσουμε την παρακάτω εικόνα με ένα απλό πρόγραμμα σε Python.
******************** ******************* ****************** ***************** **************** *************** ************** ************* ************ *********** ********** ********* ******** ******* ****** ***** **** *** ** *
Στο σχήμα αυτό αποτελείται πάλι από 20 γραμμές αλλά τώρα η πρώτη γραμμή αποτελείται από 20 αστεράκια και η τελευταία από ένα. Υπό μία ένα έννοια, θα πρέπει να κάνουμε την αντίστροφη δουλειά από αυτή που κάναμε πριν.
Η λειτουργία range μπορεί να έχει και ένα τρίτο όρισμα το οποίο αντιστοιχεί στο βήμα με το οποίο θα «διατρέχει » τους αριθμούς από το πρώτο όρισμα ως το δεύτερο. Χρησιμοποιώντας αυτή τη δυνατότητα, μπορούμε να σχεδιάσουμε το δεύτερο σχήμα με τον κώδικα που ακολουθεί.
>>> for n in range(20,0,-1): print("*" * n) ******************** ******************* ****************** ***************** **************** *************** ************** ************* ************ *********** ********** ********* ******** ******* ****** ***** **** *** ** * >>>Το ίδιο πρόβλημα μπορούμε να το λύσουμε και με τον κώδικα που ακολουθει.
for n in range(1,21): print("*" * (21 - n))Μπορείτε να καταλάβετε τι κάνει ο κώδικας;
Το τελευταίο παράδειγμα που θα συζητήσουμε είναι ο τρόπος δημιουργίας της παρακάτω εικόνας.
******************** ******************* ****************** ***************** **************** *************** ************** ************* ************ *********** ********** ********* ******** ******* ****** ***** **** *** ** *Και πάλι η πρώτη γραμμή αποτελείται από 20 αστεράκια και η τελευταία από 1 αλλά τώρα υπάρχουν κενά πριν τα αστεράκια και έτσι τα αστεράκια είναι στοιχισμένα στα δεξιά (πριν ήταν στοιχισμένα στα αριστερά). Για να λύσουμε αυτό το πρόβλημα πρέπει να τυπώσουμε πρώτα 20-n κενά και μετά n αστεράκια. Λογικά σκεπτόμενος κάποιος θα χρησιμοποιούσε δυο εντολές εκτύπωσης αλλά η Python μας επιτρέπει να «προσθέτουμε» συμβολοσειρές. Το αποτέλεσμα της πρόσθεσης της συμβολοσειράς S με την συμβολοσειρά T, δηλαδή η πράξη S + T, είναι η συμβολοσιερά ST, δηλαδή μια νέα συμβολοσεριά που έχει τη δεύτερη στο τέλος της πρώτης. Παρακάτω δίνεται ένα από παράδειγμα για να γίνει απολύτως καταονητό τι εννούμε.
>>> "Ta" + "to" 'Tato' >>>
Τώρα πλέον είναι εύκολο να γράψουμε μια εντολή for η οποία θα σχεδιάζει την προηγούμενη εικόνα.
>>> for n in range(20,0,-1): print(" " * (20 - n) + "*" * n) ******************** ******************* ****************** ***************** **************** *************** ************** ************* ************ *********** ********** ********* ******** ******* ****** ***** **** *** ** * >>>Ασκήσεις
Τις λύσεις των ασκήσεων πρέπει να τις στείλετε με email στη διεύθυνση παρακάτω
2gymofxanthi@gmail.com μέχρι τις 14 Μαΐου 2025 και ώρα 23:59. Στο σώμα του email θα έχετε τις απαντήσεις των ερωτήσεων και στο θέμα το όνομα σας, το επώνυμο σας και το τμήμα σας.
- Να γράψετε μια εντολή for που θα σχεδιάζει το παρακάτω σχήμα.
********** ********** ********** ********** ********** ********** ********** ********** ********** **********
Το σχήμα έχει δέκα γραμμές και σε κάθε γραμμή είναι τυπωμένα 10 αστεράκια. - Να γράψετε μια εντολή for που θα σχεδιάζει το παρακάτω σχήμα.
********** ********** ********** ********** ********** ********** ********** ********** ********** **********Το σχήμα έχει δέκα γραμμές και σε κάθε γραμμή είναι τυπωμένα 10 αστεράκια. - Γράψτε μια εντολή for που θα σχεδιάζει το παρακάτω σχήμα.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- Να γράψετε μια εντολή for που θα σχεδιάζει το παρακάτω σχήμα.
********** * * * * * * * * * * * * * * * * **********
Υπόδειξη: Το σώμα της εντολής for μπορεί να περιέχει μια εντολή if. - Να γράψετε μια εντολή for που θα σχεδιάζει το παρακάτω σχήμα.
* *** ***** ******* ********* *********** ************* *************** ***************** ******************* - Συμπληρώστε τον κώδικα που ακολουθεί
for k in range(0,20): if ? ? ?: ???????????????????????? else: print(" " * (k - 9) + "*" * (40 - (2*k + 1)))ώστε να τυπώνει το σχήμα που ακολουθεί:* *** ***** ******* ********* *********** ************* *************** ***************** ******************* ******************* ***************** *************** ************* *********** ********* ******* ***** *** *
Ημερολόγιο
Ανακοινώσεις
Όλες...- - Δεν υπάρχουν ανακοινώσεις -