Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
81 lines (71 sloc) 4.67 KB
''' άσκηση από το http://pythonies.mysch.gr/chapters/guess.pdf
Να κατασκευάσετε ένα πρόγραμμα το οποίο θα επιλέγει έναν μυστικό
αριθμό από το 1 μέχρι και το 32 και ο χρήστης θα προσπαθεί να τον
μαντέψει μέσα σε 4 προσπάθειες το πολύ. Σε κάθε προσπάθεια, ο χρή-
στης θα επιλέγει δύο αριθμούς που θ’ αποτελούν την «παγίδα» του και
το πρόγραμμα θα τον ενημερώνει αν ο μυστικός αριθμός βρίσκεται ανά-
μεσα στους αριθμούς της παγίδας, αν είναι μικρότερος ή μεγαλύτερος
από αυτούς. Για να βρίσκεται ένας αριθμός μέσα στην παγίδα θα πρέπει
να είναι τουλάχιστον ίσος με τον μικρότερο αριθμό της παγίδας και το
πολύ ίσος με τον μεγαλύτερο. Όταν η παγίδα αποτελείται από δύο αριθ-
μούς που είναι ίσοι μεταξύ τους και ταυτίζονται με τον μυστικό αριθμό
τότε ο χρήστης έχει μαντέψει τον μυστικό αριθμό.
Όπως και στο «Μάντεψε τον Αριθμό», μπορείτε τελικά να αυτοματοποιή-
σετε την αναζήτηση του αριθμού, γράφοντας μια συνάρτηση αντίστοιχη
της midNumber(), η οποία επιλέγει σε κάθε γύρο την κατάλληλη παγίδα.
'''
import random
def choosenumbers(a,b):
""" επιλέγει τους αριθμούς που χωρίζουν το διάστημα a,b στα τρία
a, b: όρια για τον αριθμό
"""
# εμφάνιση προτροπής
print("Μάντεψε τον αριθμό:", a, "-", b)
# υπολογισμός μεσαίου αριθμού
d = (b - a + 1) // 3
# όσο τα άκρα του διαστήματος διαφέρουν τουλάχιστον κατά 3
# χώρισε το διάστημα σε 3 και επίστρεψε τους αριθμούς που βρίσκονται
# στο 1/3 και στα 2/3 του διαστήματος
if d > 0 :
onethird = a + d
twothirds = b - d
elif b - a == 2:
# αν η διαφορά των άκρων του διαστήματος είναι ίση με 2 τότε δοκίμασε τον αριθμό που βρίσκεται στη μέση
onethird = twothirds = a + 1
else:
# αν η διαφορά των άκρων του διαστήματος είναι μικρότερη από 2, τότε δοκίμασε το μικρότερο άκρο
onethird = twothirds = a
print("Ο υπολογιστής επιλέγει τους αριθμούς:", onethird, twothirds)
# επιστροφή αριθμών
return onethird, twothirds
# αρχικές τιμές
low = 1
high = 32
secret = random.randint(low,high)
found = False
tries = 4
while not found and tries > 0:
print("Απομένουν", tries, "προσπάθειες.")
tries = tries - 1
# επιλογή παγίδας από το ίδιο το πρόγραμμα
lower,upper = choosenumbers(low,high)
# έλεγχος παγίδας, εμφάνιση μηνύματος κι ενημέρωση low και high
if lower > secret:
# ο μυστικός αριθμός είναι μικρότερος από το κάτω άκρο της παγίδας
print("Λάθος. Είναι μικρότερος.")
high = lower - 1
elif upper < secret:
# ο μυστικός αριθμός είναι μεγαλύτερος από το άνω άκρο της παγίδας
print("Λάθος. Είναι μεγαλύτερος.")
low = upper + 1
elif lower != upper:
# ο μυστικός αριθμός είναι σίγουρα μέσα στην παγίδα, αλλά τα άκρα της παγίδας δεν ταυτίζονται
print("Ο μυστικός αριθμός είναι μέσα στο διάστημα που έδωσες.")
low = lower
high = upper
else:
# ο μυστικός αριθμός και τα άκρα της παγίδας ταυτίζονται
print("Σωστά!")
found = True
if not found:
print("Ήταν ο", secret)