Πριν να σκεφτόμαστε πώς να εφαρμόσουν αυτό το python (ή οποιαδήποτε γλώσσα) αφήνει να δούμε την ψευδοκώδικα, το οποίο μοιάζει με ένα πολύ καλό σχέδιο για την επίλυση του προβλήματος.
Θα ήθελα να μαντέψει ότι ένα πράγμα που θα μπορούσε να πάρει κολλήσει σε είναι ο τρόπος με τον ψευδοκώδικα αναφοράς των μεταβλητών , όπως highκαι low. Ο τρόπος για να κατανοήσουμε μεταβλητές είναι να εξετάσει slots που οι τιμές μπορεί να αποθηκευτεί. Σε κάθε δεδομένη στιγμή, μια μεταβλητή έχει κάποια αξία, όπως ο αριθμός 5, ή μια αναφορά σε ένα ανοικτό αρχείο. Αυτή η τιμή μπορεί να κληθεί οποιαδήποτε στιγμή, χρησιμοποιώντας το όνομά του, ή μπορεί να δοθεί μια νέα τιμή με την ανάθεση σε αυτήν, και η παλιά τιμή θα ξεχαστεί με τη νέα τιμή που λαμβάνει χώρα του.
Ο ψευδοκώδικας αναφέρει τρεις μεταβλητές, high, lowκαι tries. Επίσης σας λέει τι θα πρέπει να είναι αρχικές τους τιμές. Αφού έχει εκτελεστεί η δεύτερη γραμμή, οι τιμές αυτές καθορίζονται 1000, 1 και 1, αντίστοιχα, αλλά παίρνουν νέες τιμές καθώς το πρόγραμμα εξελίσσεται.
Ένα άλλο χαρακτηριστικό της ψευδοκώδικα είναι ένα υπό όρους βρόχο, και μία ανάλυση περίπτωση της εισόδου του χρήστη. Μετάφραση σας του βρόχου του ψευδοκώδικα είναι εσφαλμένη. Στην περίπτωσή σας, έχετε δημιουργήσει μια νέα μεταβλητή, iκαι οι οδηγίες του προγράμματος για να τρέξει το σώμα βρόχου με κάθε τιμή του i μεταξύ 1 και 1000. Προφανώς αυτό δεν έχει ένα πάρα πολύ να κάνει με τον ψευδοκώδικα.
Αντ 'αυτού τι θέλετε να κάνετε είναι να βρόχο για πάντα, μέχρι κάποια πάθηση (που αλλάζει στο σώμα βρόχου) γίνεται ψευδής. Στην python, η whileδήλωση κάνει αυτό. Αν είστε εξοικειωμένοι με μια ifδήλωση, whileμοιάζει το ίδιο, αλλά μετά από το σώμα γίνεται, η κατάσταση έχει επανεκτιμηθεί και το σώμα εκτελείται και πάλι, αν εξακολουθεί να είναι αλήθεια.
Τέλος, η ανάλυση περίπτωση στο σώμα του βρόχου απαιτεί τη σύγκριση κάτι για αναμενόμενες τιμές. Αν και κάποιες άλλες γλώσσες έχουν μια σειρά από τρόπους έκφρασης αυτού, σε python εμείς μόνο έχουμε if- elif- elseρήτρες.
Έξω από τη μετατροπή ψευδοκώδικα στον κώδικα εργασίας, είναι ίσως χρήσιμο να καταλάβουμε ποιο είναι το πρόγραμμα που στην πραγματικότητα κάνει. Το κλειδί εδώ είναι στη γραμμή 4, όπου το πρόγραμμα υποθέτει ο μέσος όρος των δύο τιμών. μετά από αυτό το πρόγραμμα λειτουργεί από το πόσο καλά η εικασία εκπονηθεί.
Στην πρώτη κίνηση μέσω του βρόγχου, με highπεριείχε 1000 και lowπεριέχει 1, ο μέσος όρος είναι 500 (στην πραγματικότητα η μέση τιμή είναι 500,5, αλλά επειδή είμαστε κατά μέσο όρο ακέραιους αριθμούς, εικασίες πύθωνα που θέλουμε το αποτέλεσμα της διαίρεσης επίσης να είναι ένας ακέραιος ). Προφανώς η εικασία έχει μόνο μια πιθανότητα 0,1% να είναι σωστό, αλλά αν είναι λάθος, ο χρήστης αναμένεται να μας πει αν ήταν πάρα πολύ υψηλή ή πολύ χαμηλή. Είτε έτσι είτε αλλιώς, η απάντηση εξαλείφει πλήρως το 50% των πιθανών εικασίες.
Αν, για παράδειγμα, ο χρήστης σκέφτεται ένα μικρό αριθμό, στη συνέχεια, όταν το πρόγραμμα μαντέψατε 500, ο χρήστης θα πει το πρόγραμμα που 500 ήταν πολύ υψηλή, και στη συνέχεια, το πρόγραμμα δεν θα πρέπει ποτέ να μαντέψει ότι ο αριθμός ήταν το φάσμα των 501 μέσω 1000. Αυτό μπορεί να σώσει τον υπολογιστή πολλή δουλειά.
Για να το θέσουμε αυτές τις πληροφορίες για να χρησιμοποιήσετε το πρόγραμμα παρακολουθεί το εύρος των πιθανών τιμών, ο αριθμός στόχος θα μπορούσε να είναι. Όταν ο αριθμός μαντέψατε είναι πολύ υψηλή, το πρόγραμμα προσαρμόζεται της άνω όριο προς τα κάτω, ακριβώς κάτω από την εικασία, και αν η εικασία ήταν πολύ χαμηλή, της προσαρμογής του προγράμματος της κάτω όριο προς τα πάνω ακριβώς πάνω από την εικασία.
Όταν το πρόγραμμα εικασίες και πάλι, η εικασία είναι ακριβώς στη μέση του δυνατού φάσματος, μειώνοντας το εύρος στο μισό και πάλι. Ο αριθμός των πιθανών εικασίες πήγε από την αρχική 1000 σε 500 σε μια εικασία, 250 σε δύο εικασίες. Αν το πρόγραμμα έχει φοβερή τύχη, και δεν μπορεί να πάρει δύο (το οποίο είναι πραγματικά πολύ πιθανό), τότε το τρίτο, έχει μόνο 125 αριθμούς άφησε να ανησυχούν. Μετά την τέταρτη εικασία, μόνο 62 αριθμοί παραμένουν εντός εμβέλειας. Αυτό συνεχίζεται και μετά από οκτώ εικασίες, μόνο 3 αριθμούς παραμένουν, και το πρόγραμμα προσπαθεί το μεσαίο αριθμό για ένατη εικασία του. Αν αυτό αποδειχθεί ότι είναι λάθος, μόνο ένας αριθμός αριστερά, και το πρόγραμμα αυτό μαντεύει!
Αυτή η τεχνική της διάσπασης ένα εύρος στο μισό και στη συνέχεια συνεχίζει τη στενότερη μισό είναι που ονομάζεται διχοτόμησης και εμφανίζεται σε ένα ευρύ φάσμα θεμάτων που παρουσιάζουν ενδιαφέρον για την επιστήμη των υπολογιστών.
Τι θα λέγατε για λίγο κώδικα! Επειδή δεν θέλω να σας στερήσει την εμπειρία μάθησης, απλά θα σας δώσω μερικά αποσπάσματα που μπορεί να σας βοηθήσει κατά μήκος. Python είναι μια γλώσσα σχεδιασμένη για διαδραστική εξερεύνηση, έτσι φωτιά μέχρι διερμηνέα σας και να δώσει σε αυτό έναν πυροβολισμό. Θα πρέπει να αποσπούν παραδείγματα με τα μηνύματα εμφανίζονται, μην πληκτρολογήσετε στην πραγματικότητα αυτό.
Εδώ είναι ένα παράδειγμα με τη χρήση της whileρήτρας:
>>> x = 1000
>>> while x > 1:
... x = x/2
... print x
...
500
250
125
62
31
15
7
3
1
>>> x
1
Να πάρει εισόδου της κονσόλας από τον χρήστη θα πρέπει να γίνει μέσω της raw_input()λειτουργίας. Επιστρέφει μόνο ανεξάρτητα από το είδος του χρήστη. Αυτό είναι λίγο πιο δύσκολο να δείξει. Για να απλοποιήσουμε τα πράγματα, μετά από κάθε γραμμή του πύθωνα που απαιτεί είσοδο, θα πληκτρολογήσετε «Hello World!» (χωρίς τα εισαγωγικά)
>>> raw_input()
Hello World!
'Hello World!'
>>> y = raw_input()
Hello World!
>>> print y
Hello World!
>>>
Τι θα λέγατε για κάποιο συνδυασμό των εννοιών!
>>> myvar = ''
>>> while myvar != 'exit':
... myvar = raw_input()
... if myvar == 'apples':
... print "I like apples"
... elif myvar == 'bananas':
... print "I don't like bananas"
... else:
... print "I've never eaten", myvar
...
apples
I like apples
mangoes
I've never eaten mangoes
bananas
I don't like bananas
exit
I've never eaten exit
>>>
Ωχ. μικρό κομμάτι από ένα bug εκεί. Δείτε αν μπορείτε να το διορθώσετε!