Αφού είδαμε στο τελευταίο μάθημα πώς γίνεται να αλληλεπιδράσουμε με αρχεία του υπολογιστή μας μέσω της Python, θα εφαρμόσουμε σήμερα τις γνώσεις μας με ένα ακόμα project. Ας δούμε με ποιον τρόπο μπορούμε να κατασκευάσουμε ένα ερωτηματολόγιο, δημιουργώντας μαζικά αρχεία, γεμίζοντάς τα με περιεχόμενο, και επιλέγοντας με τυχαίο τρόπο τις ερωτήσεις του.
Για να βλέπεις ΟΠΟΙΑ ταινία και σειρά θέλεις ΟΤΑΝ θέλεις, σε Ελλάδα ή εξωτερικό, και να μπλοκάρεις ενοχλητικές διαφημίσεις παντού στο ίντερνετ, βάλε Cyberghost μόνο με €2 το μήνα και με bonus +3 μήνες δωρεάν στη διετή συνδρομή:
Για να δείτε όλα τα μαθήματα Python από την αρχή τους, αλλά και τα επόμενα, αρκεί να κάνετε κλικ εδώ.
Δείτε τις ενότητες του οδηγού:
Το νεότερο βίντεο του PCsteps
Project: Δημιουργία ερωτηματολογίου
Ας υποθέσουμε ότι εργαζόμαστε ως καθηγητής γεωγραφίας σε μια τάξη 30 μαθητών, και θέλουμε να τους εξετάσουμε στις πρωτεύουσες των νομών της Ελλάδας. Αν και θέλουμε το τεστ να είναι πολλαπλής επιλογής, εντούτοις δεν εμπιστευόμαστε τους σεσημασμένους μαθητές μας ότι δεν θα αντιγράψουν.
Αυτό που πρέπει να κάνουμε, λοιπόν, είναι να ανακατέψουμε τη σειρά των ερωτήσεων, έτσι ώστε κάθε μαθητής να έχει ένα μοναδικό σετ ερωτήσεων στο τεστ. Πρόκειται για μια βαρετή δουλειά που θα επιταχυνόταν σημαντικά με τη βοήθεια ενός προγράμματος. Και επειδή εκτός από γεωγραφία, ξέρουμε και Python, μπορούμε να το γράψουμε εμείς.
Αντικείμενο προγράμματος
Το πρόγραμμά μας πρέπει να:
- Δημιουργεί 30 διαφορετικά ερωτηματολόγια.
- Δημιουργεί 51 ερωτήσεις πολλαπλής επιλογής για κάθε ερωτηματολόγιο, με τυχαία σειρά.
- Παρέχει τη σωστή απάντηση και τρεις τυχαίες λάθος απαντήσεις για κάθε ερώτημα, επίσης σε τυχαία σειρά.
- Κάνει εγγραφή των ερωτηματολογίων σε 30 αρχεία κειμένου.
- Κάνει εγγραφή των απαντήσεων σε 30 αρχεία κειμένου.
Τα παραπάνω σημαίνουν ότι ο κώδικας θα πρέπει να εκτελεί, σε ένα γενικό πλαίσιο, τα εξής:
- Αποθηκεύει τους νομούς και τις πρωτεύουσές τους σε ένα λεξικό.
- Καλεί τις open(), write(), και close() για τα αρχεία κειμένου στα οποία θα αποθηκευθούν ερωτηματολόγια και απαντήσεις.
- Χρησιμοποιεί μια συνάρτηση του module random, ώστε να κατανέμεται τυχαία η σειρά των ερωτήσεων και των πολλαπλών επιλογών.
Βήμα 1: Αποθήκευση δεδομένων
Η πρώτη μας κίνηση είναι να κατασκευάσουμε έναν βασικό σκελετό του προγράμματός μας και να εισάγουμε, για αρχή, τα δεδομένα του τεστ. Δημιουργούμε ένα νέο αρχείο στον editor μας και γράφουμε:
Εφόσον το πρόγραμμα θα διαλέγει τυχαία τις ερωτήσεις και τις απαντήσεις, κάνουμε import και το random module, γιατί θα χρειαστούμε τις συναρτήσεις του.
Προσθέτουμε, τώρα, τα δεδομένα μας:
Η μεταβλητή capitals περιέχει ένα λεξικό με όλους τους νομούς ως κλειδιά, και τις αντίστοιχες πρωτεύουσες ως τιμές.
Από τη στιγμή που θέλουμε τα ερωτηματολόγια που θα δημιουργηθούν να είναι 30, ο κώδικας που θα δημιουργεί τα αρχεία ερωτηματολογίων και απαντήσεων μπαίνει σε έναν βρόχο for 30 επαναλήψεων.
Βήμα 2: Δημιουργία ερωτήσεων
Ας ξεκινήσουμε να συμπληρώνουμε με τη σειρά τα TODO του κώδικά μας.
Είπαμε ότι ο βρόχος θα εκτελεστεί 30 φορές, μία για κάθε ερωτηματολόγιο. Επομένως σε κάθε επανάληψη εργαζόμαστε με ένα σετ ερωτήσεων τη φορά.
Αρχικά δημιουργούμε το αρχείο δίνοντάς του, εκτός από όνομα, και μια κεφαλίδα με πεδία για να συμπληρώνονται στοιχεία όπως το ονοματεπώνυμο, η ημερομηνία, και η διδακτική περίοδος.
Έπειτα θα χρειαστεί να πάρουμε μια λίστα των νομών σε τυχαία σειρά. Τη λίστα θα χρησιμοποιήσουμε αργότερα για τη δημιουργία ερωτήσεων και απαντήσεων του ερωτηματολογίου.
Με βάση τα όσα είπαμε, πάμε να προσθέσουμε στον κώδικά μας τα εξής:
Τα ονόματα των αρχείων για τα ερωτηματολόγια θα είναι της μορφής capitalsquiz<N>.txt. Το <N> αυτό είναι ο μοναδικός αριθμός του συγκεκριμένου σετ ερωτήσεων που προέρχεται από το quiz_num, τον μετρητή του βρόχου for. Οι απαντήσεις για το capitalsquiz<N>.txt θα αποθηκεύεται σε ένα αρχείο κειμένου, που ονομάζουμε capitasquiz_answers<N>.txt.
Σε κάθε επανάληψη του βρόχου, το σύμβολο %s στα 'capitalsquiz%s.txt' και 'capitalsquiz_answers%s.txt' θα αντικαθίσταται από τον αριθμό (quiz_num+1). Έτσι, το πρώτο αρχείο ερωτήσεων και το πρώτο αρχείο απαντήσεων θα ονομάζονται capitalsquiz1.txt και capitalsquiz_answers1.txt, αντίστοιχα.
Τα αρχεία αυτά δημιουργούνται με κλήσεις της συνάρτησης open() και δεύτερη παράμετρο το 'w', ώστε μετά τη δημιουργία τους, τα αρχεία να ανοίγουν σε λειτουργία εγγραφής.
Στη συνέχεια, με τις write() κατασκευάζουμε εντός του κάθε αρχείου, σαν κεφαλίδα, τα στοιχεία που θα ζητηθεί να εισάγει ο μαθητής. Τέλος, με τη random.shuffle() ανακατανέμουμε σε τυχαία σειρά τις τιμές της λίστας που τις περνάμε ως όρισμα.
Βήμα 3: Δημιουργία απαντήσεων
Η επόμενη εργασία που πρέπει να επιτελεί το πρόγραμμα είναι η δημιουργία επιλογών προς απάντηση για την κάθε ερώτηση, με τη μορφή πολλαπλής επιλογής, από το Α ως το Δ.
Θα χρειαστούμε άλλον έναν βρόχο, αυτή τη φορά για την παραγωγή περιεχομένου για καθεμία από τις 51 ερωτήσεις του ερωτηματολογίου. Εντός του βρόχου αυτού, θα τοποθετήσουμε έναν τρίτο βρόχο, για να δημιουργούνται οι επιλογές πολλαπλής επιλογής για κάθε ερώτηση.
Οπότε γράφουμε στον κώδικά μας τα παρακάτω:
Το εύκολο της υπόθεσης είναι να πάρουμε την ορθή απάντηση, και την αποθηκεύουμε ως τιμή στο λεξικό capitals. Ο βρόχος αυτός περνάει από όλους τους νομούς της (ανακατεμένης) λίστας counties, από το counties[0] ως το counties[50], βρίσκει κάθε νομό στην capitals, και αποθηκεύει την πρωτεύουσα του συγκεκριμένου νομού στην correct_answer.
Η λίστα με τα υπόλοιπα πιθανά στοιχεία πολλαπλής επιλογής είναι πιο πολύπλοκη. Για να την λάβουμε, ακολουθούμε την εξής τακτική:
- Αντιγράφουμε όλες τις τιμές του λεξικού capitals.
- Διαγράφουμε τη σωστή απάντηση μεταξύ αυτών.
- Επιλέγουμε τρεις τυχαίες τιμές από τη λίστα που απομένει.
Το τελευταίο γίνεται εύκολα με τη συνάρτηση random.sample(). Το πρώτο του όρισμα είναι η λίστα από την οποία θα γίνει η επιλογή, ενώ το δεύτερο ο αριθμός των τιμών που θα διαλέξουμε. Η τελική λίστα των πολλαπλών επιλογών κάθε ερώτησης είναι ο συνδυασμός των τριών εσφαλμένων απαντήσεων με τη μία σωστή.
Τέλος, για να αποφύγουμε τους μαθητές που παίζουν με σύστημα τις απαντήσεις, δεν θα ξεχάσουμε να ανακατέψουμε τη σειρά των σωστών απαντήσεων, μεταξύ των τεσσάρων πιθανών επιλογών. Σε διαφορετική περίπτωση, θα έχουμε όλες τις σωστές στο Δ.
Βήμα 4: Εγγραφή σε αρχεία
Το μόνο που απέμεινε είναι να γράψουμε την ερώτηση στο αρχείο του ερωτηματολογίου, και την απάντηση στο αρχείο των απαντήσεων.
Συμπληρώνουμε τον κώδικά μας με τα ακόλουθα:
Με έναν βρόχο for, περνάμε από τους αριθμούς 0 έως 3 για να γράψουμε τις επιλογές των απαντήσεων. Η έκφραση 'ΑΒΔΓ'[i] χειρίζεται το string 'ΑΒΓΔ' ως πίνακα. Επομένως, σε κάθε επανάληψη του βρόχου θα επιστρέφει 'Α', 'Β', 'Γ', και 'Δ'.
Στην τελευταία γραμμή, η έκφραση:
answer_options.index(correct_answer)
θα βρει τον ακέραιο δείκτη της ορθής απάντησης στις (τυχαία κατανεμημένες) επιλογές απάντησης, ενώ η έκφραση:
'ΑΒΓΔ'[answer_options.index(correct_answer)]
θα επιστρέψει το γράμμα της σωστής απάντησης, για να πάμε να το γράψουμε στο αρχείο απαντήσεων.
Εκτελώντας το πρόγραμμα, δεν θα δούμε κάτι στην κονσόλα του IDLE, πέρα από το γεγονός ότι δεν πήραμε κάποιο error.
Πηγαίνοντας όμως στον φάκελο όπου βρίσκεται το πρόγραμμά μας, και αφού προσέξουμε να επιλέξουμε εμφάνιση όλων των τύπων αρχείου...
...θα δούμε τα αρχεία που δημιούργησε η τελευταία εκτέλεση του προγράμματος.
Για παράδειγμα, το αρχείο capitalsquiz1.txt θα μοιάζει με το αρχείο αυτής της εικόνας.
Βέβαια οι ερωτήσεις και οι αντίστοιχες πιθανές απαντήσεις τους αναμένουμε να διαφέρουν από του δικού μας παραδείγματος, ανάλογα με το αποτέλεσμα των κλήσεων της random.shuffle().
Στο επόμενο μάθημα για τον προγραμματισμό Python
Θα μάθουμε - επιτέλους - πώς μπορούμε με τα προγράμματά μας να έρθουμε σε επαφή με το διαδίκτυο, να κατεβάζουμε περιεχόμενο από ιστοσελίδες, κοκ.
Σας άρεσε το σημερινό μάθημα για τον προγραμματισμό Python?
Γράψτε μας στα σχόλια για οποιαδήποτε ερωτήματα που σας γεννήθηκαν από το σημερινό μάθημα.
Για να δείτε όλα τα μαθήματα Python από την αρχή τους, αλλά και τα επόμενα, αρκεί να κάνετε κλικ εδώ.
Το κανάλι του PCsteps στο YouTube






Υποστηρίξτε τη λειτουργία του PCsteps
Θέλετε να υποστηρίξετε το PCsteps στη λειτουργία του, για να δημοσιεύουμε καθημερινά υψηλής ποιότητας οδηγούς και βίντεο σχετικά με την τεχνολογία?
Μπορείτε να κάνετε ένα like στη σελίδα μας στο Facebook, να μοιραστείτε τον οδηγό με τους φίλους σας, και να επιλέξετε τις φιλικές μας επιχειρήσεις για τις ηλεκτρονικές σας αγορές, από τους παρακάτω συνδέσμους:
- Pigogo.gr Επιστροφή χρημάτων σε κάθε σου online αγορά από 450+ επώνυμα ηλεκτρονικά καταστήματα σε όλη την Ελλάδα, με μία δωρεάν εγγραφή!
- E-shop.gr
- E-Lenovo
- Media Markt
- Public
Με κάθε σας αγορά, και χωρίς να χρεώνεστε τίποτα επιπλέον, το site μας θα παίρνει μια πολύ μικρή προμήθεια, η οποία είναι σημαντική βοήθεια για την κάλυψη των λειτουργικών εξόδων και τις αμοιβές των συνεργατών.
Αν προτιμάτε αγορές από την Κίνα, για να πετύχετε καλύτερες τιμές, συνεργαζόμαστε με τα μεγαλύτερα κινέζικα e-shop:
Δείτε τι να προσέχετε στις αγορές από Κίνα για να αποφύγετε το τελωνείο.
Για την πλήρη προστασία όλων σας των συσκευών με Windows, Android, iOS, και MacOS, το PCsteps εμπιστεύεται, χρησιμοποιεί, και προτείνει τα προϊόντα ασφαλείας της Bitdefender.
Μάλιστα, μπορείτε σε αποκλειστικότητα να δοκιμάσετε το Bitdefender Internet Security δωρεάν για 90 ημέρες.
Καλησπέρα. Υπάρχει Python για εφαρμογές windows, όπως η Visual Basic;
Θα μπορούσες να φτιάξεις windows apps σε Python αλλά θα παιδευτείς πολύ, χωρίς να υπάρχει το αντίστοιχο documentation στο Internet. Αντ' αυτού μαθαίνεις C# και κάνεις τη ζωή σου πιο εύκολη.
Καλησπέρα ! Θα μπορούσες να στείλεις τον κώδικα απο το προγραμμα που χρησιμοποίησες ?