Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
136 lines (119 sloc) 6.14 KB
import random
import time
def next(p):
""" Επιστρέφει τον αριθμό του παίκτη
που παίζει μετά τον παίκτη p.
p: αριθμός παίκτη (1 ή 2)
"""
return 3 - p
def readNumber():
""" Ζητάει από το χρήστη έναν αριθμό
και τον επιστρέφει.
"""
# εμφάνιση προτροπής και ανάγνωση αριθμού
print("Μάντεψε τον αριθμό μου:", end = " ")
num = int(input())
# επιστροφή αριθμού
return num
def computeNumber(a,b, tries):
""" Επιλέγει τον μεσαίο αριθμό
μεταξύ των a και b και τον επιστρέφει,
εκτός κι αν η tries είναι ίση με 1, οπότε
επιστρέφει έναν τυχαίο αριθμό μεταξύ των a και b.
a, b: όρια για τον αριθμό
tries: το πλήθος των προσπαθειών που απομένουν
"""
# εμφάνιση προτροπής
# print("Μάντεψε τον αριθμό:", a , "-", b)
if tries > 1:
# υπολογισμός μεσαίου αριθμού
return (a + b) // 2
else:
# επιλογή τυχαίου αριθμού
return random.randint(low,high)
def checkSecret(a,b):
""" Ζητάει τον μυστικό αριθμό του χρήστη
για να ελέγξει αν αυτός είναι συνεπής
με τις απαντήσεις που έχει δώσει
a, b: όρια για τον μυστικό αριθμό
"""
print("Ο δικός σου ποιος ήταν;")
answer = int(input())
if answer < a or answer > b:
print("Κάπου μου είπες ψέματα. Σύμφωνα με τις απαντήσεις σου")
print("ο μυστικός σου αριθμός έπρεπε να είναι ανάμεσα στο", a, "και στο", b)
else:
print("OK.")
# προετοιμασία προγράμματος:
# οι μεταβλητές low και high είναι τα όρια
# ανάμεσα στα οποία βρίσκονται οι μυστικοί αριθμοί
low = 1
high = 32
# δημιουργία τυχαίου μυστικού αριθμού για το πρόγραμμα
secret = random.randint(low,high)
print("Διάλεξα έναν μυστικό αριθμό από το", low, "μέχρι και το", high)
print("Κάνε κι εσύ το ίδιο.")
print("Θα προσπαθήσουμε να μαντέψουμε ο ένας τον αριθμό του άλλου.")
time.sleep(2)
# προετοιμασία παιχνιδιού:
# κανένας μυστικός αριθμός δεν έχει εντοπιστεί
found = 0
# ορισμός μέγιστου πλήθους προσπαθειών (και για τους δύο παίκτες μαζί)
tries = 8
# επιλογή παίκτη-υπολογιστή
computer = random.randint(1,2)
# ορισμός παίκτη που θα παίξει πρώτος
player = 1
# επανάληψη: τερματίζεται όταν
# βρεθεί οποιοσδποτε αριθμός και έχει ολοκληρωθεί ο γύρος (έχουν προσπαθήσει και οι δύο παίκτες)
# ή όταν εξαντληθούν οι προσπάθειες
while (found == 0 or tries % 2 == 1) and tries > 0:
# επιλογή κίνησης, ανάλογα με τον παίκτη
if player == computer:
# εμφάνιση και μείωση προσπαθειών
print("\nΜου απομένουν", (tries+1) // 2, "προσπάθειες.")
tries = tries - 1
# επιλογή αριθμού από το ίδιο το πρόγραμμα
number = computeNumber(low, high, (tries+1) // 2)
print("Επιλέγω τον αριθμό ", number, ". Ο αριθμός σου είναι:", sep = "")
# o χρήστης αξιολογεί τον μυστικό αριθμό.
print("1. Μικρότερος 2. Μεγαλύτερος 3. Ίσος;", end=" ")
answer = int(input())
# έλεγχος αριθμού και ενημέρωση ορίων
if answer == 1:
high = number - 1
elif answer == 2:
low = number + 1
else:
# ο μυστικός αριθμός του χρήστη εντοπίστηκε
found = found + player
else:
# εμφάνιση και μείωση προσπαθειών
print("\nΣου απομένουν", (tries+1) // 2, "προσπάθειες.")
tries = tries - 1
# επιλογή αριθμού από το χρήστη
number = readNumber()
# έλεγχος αριθμού και εμφάνιση μηνύματος
if number > secret:
print("Λάθος. Είναι μικρότερος.")
elif number < secret:
print("Λάθος. Είναι μεγαλύτερος.")
else:
print("Σωστά!")
# ο μυστικός αριθμός του προγράμματος εντοπίστηκε
found = found + player
# εναλλαγή παίκτη
player = next(player)
# μετά την επανάληψη: ανακοίνωση αποτελέσματος
if found == 0:
print("\nΙσοπαλία. Κανείς από τους δύο μας δε βρήκε τον μυστικό αριθμό του άλλου.")
print("Ο δικός μου μυστικός αριθμός ήταν ο", secret)
checkSecret(low, high)
elif found == 3:
print("\nΙσοπαλία. Βρήκαμε και οι δύο τον μυστικό αριθμό του άλλου.")
elif found == computer:
print("\nΚέρδισα. Βρήκα τον μυστικό αριθμό σου.")
print("Ο δικός μου μυστικός αριθμός ήταν ο", secret)
else:
print("\nΚέρδισες. Βρήκες τον μυστικό αριθμό μου.")
checkSecret(low, high)