Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
97 lines (87 sloc) 4.25 KB
''' άσκηση από το http://pythonies.mysch.gr/chapters/nim.pdf
Στο παιχνίδι «Τα Ζυγά Κερδίζουν» οι δύο παίκτες ξεκινούν με μια σειρά
από αντικείμενα. Το αρχικό πλήθος των αντικειμένων πρέπει να είναι
περιττός αριθμός. Κάθε ένας από τους δύο παίκτες αφαιρεί με τη σειρά
του από ένα μέχρι και τέσσερα αντικείμενα, μέχρι ν’ αφαιρεθούν όλα.
Νικητής είναι ο παίκτης που στο τέλος του παιχνιδιού απομένει με άρτιο
(ζυγό) πλήθος αντικειμένων. Να αναπτύξετε ένα πρόγραμμα που θα δια-
βάζει σε κάθε γύρο τον αριθμό των σπίρτων που αφαιρεί ο παίκτης που
έχει σειρά και στο τέλος ανακοινώνει το νικητή.
'''
import random
def next(p):
""" Επιστρέφει τον αριθμό του παίκτη
που παίζει μετά τον παίκτη p.
p: αριθμός παίκτη (1 ή 2)
"""
if p == 1:
return 2
else:
return 1
def maxMatches(m):
""" Επιστρέφει το μέγιστο πλήθος σπίρτων
που επιτρέπεται να αφαιρεθούν.
m: πλήθος σπίρτων που απομένουν
"""
# το πολύ 4 σπίρτα
if m > 4:
return 4
else:
return m
def readMatches(p,m):
""" Διαβάζει από το χρήστη κι επιστρέφει
το πλήθος σπίρτων που θα αφαιρεθούν.
Εξασφαλίζει ότι η τιμή είναι έγκυρη.
p: αριθμός παίκτη που παίζει
m: πλήθος σπίρτων που απομένουν
"""
# μέγιστο πλήθος σπίρτων προς αφαίρεση
limit = maxMatches(m)
# ανάγνωση σπίρτων που θα πάρει ο παίκτης
print("Παίκτη", p, "πόσα σπίρτα θέλεις;")
num = int(input())
# έλεγχος και επανάληψη (σε περίπτωση λάθους)
while num < 1 or num > limit:
# μήνυμα λάθους
print("Πάρε από 1 μέχρι και",limit,"σπίρτα.")
# ανάγνωση σπίρτων που θα πάρει ο παίκτης
print("Παίκτη", p, "πόσα σπίρτα θέλεις;")
num = int(input())
# επιστροφή τιμής
return num
# αρχικό πλήθος σπίρτων
matches = 27
# εμφάνιση αρχικού πλήθους σπίρτων
print("Αρχικό πλήθος σπίρτων:", matches)
# τα σπίρτα που έχει συγκεντρώσει κάθε παίκτης
matches1 = 0
matches2 = 0
# ορισμός παίκτη που θα παίξει πρώτος
player = 1
# επανάληψη: συνεχίζεται μέχρι να εξαντληθούν τα σπίρτα
while matches > 0:
# ανάγνωση σπίρτων που θα πάρει ο παίκτης
removed = readMatches(player, matches)
if player == 1:
# τα σπίρτα του παίκτη 1 αυξάνονται
matches1 = matches1 + removed
else:
# τα σπίρτα του παίκτη 2 αυξάνονται
matches2 = matches2 + removed
# μείωση σπίρτων
matches = matches - removed
# εμφάνιση πλήθους σπίρτων που απομένουν
print(20*"-")
print("Σπίρτα που έχει πάρει o παίκτης 1:", matches1)
print("Σπίρτα που έχει πάρει o παίκτης 2:", matches2)
print("Σπίρτα που απομένουν:", matches)
print(20*"-")
# εναλλαγή παίκτη
player = next(player)
# εμφάνιση αποτελέσματος παιχνιδιού
if matches1 % 2 == 0:
print("Κέρδισε ο παίκτης 1!")
print("Πήρε", matches1, "σπίρτα.")
else:
print("Κέρδισε ο παίκτης 2.")
print("Πήρε", matches2, "σπίρτα.")