Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

4.2 Παραγωγή Τυχαίων Αριθμών για Προσομοίωση και Παιχνίδια

Η παραγωγή τυχαίων αριθμών είναι ένα σημαντικό στοιχείο σε πολλές εφαρμογές προγραμματισμού, όπως στις προσομοιώσεις και τα παιχνίδια. Στην Python, μπορείτε να χρησιμοποιήσετε την ενσωματωμένη βιβλιοθήκη random για να παράγετε τυχαίους αριθμούς.

Παραγωγή Τυχαίων Αριθμών για το Ρίξιμο Ενός Εξάπλευρου Ζαριού

Για να προσομοιώσετε το ρίξιμο ενός εξάπλευρου ζαριού, μπορείτε να παράγετε τυχαίους ακέραιους αριθμούς στο εύρος από 1 έως 6. Ας δούμε πώς μπορείτε να παράγετε 10 τυχαίους αριθμούς για τον σκοπό αυτό:

Παράδειγμα Κώδικα

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import random
# Παραγωγή 10 τυχαίων αριθμών για το ρίξιμο ενός εξάπλευρου ζαριού
for roll in range(10):
number = random.randint(1, 6)
print(number)
import random # Παραγωγή 10 τυχαίων αριθμών για το ρίξιμο ενός εξάπλευρου ζαριού for roll in range(10): number = random.randint(1, 6) print(number)
import random

# Παραγωγή 10 τυχαίων αριθμών για το ρίξιμο ενός εξάπλευρου ζαριού
for roll in range(10):
    number = random.randint(1, 6)
    print(number)

Στο παράδειγμα αυτό, η συνάρτηση randint της βιβλιοθήκης random χρησιμοποιείται για να παράγει έναν τυχαίο αριθμό ανάμεσα στο 1 και το 6. Η εντολή επανάληψης for εκτελείται 10 φορές, παράγοντας και εκτυπώνοντας έναν τυχαίο αριθμό κάθε φορά.

Σημασία της Παραγωγής Τυχαίων Αριθμών

Η παραγωγή τυχαίων αριθμών είναι χρήσιμη σε πολλές εφαρμογές, όπως παιχνίδια, προσομοιώσεις, και ακόμα και σε εφαρμογές που αφορούν ασφάλεια και κρυπτογραφία. Η βιβλιοθήκη random της Python παρέχει μια σειρά από λειτουργίες για την εύκολη παραγωγή τυχαίων τιμών σε διάφορες μορφές και εύρη.

Χρήση της Συνάρτησης randrange της Βιβλιοθήκης random στην Python

Η βιβλιοθήκη random της Python προσφέρει διάφορες λειτουργίες για την παραγωγή τυχαίων αριθμών, μία από τις οποίες είναι η συνάρτηση randrange. Αυτή η συνάρτηση χρησιμοποιείται για την παραγωγή ενός τυχαίου ακεραίου αριθμού εντός ενός καθορισμένου εύρους.

Χρήση της randrange

Για να χρησιμοποιήσετε την randrange, πρώτα εισάγετε την βιβλιοθήκη random:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import random
import random
import random

Στη συνέχεια, μπορείτε να καλέσετε την randrange για να παράγετε τυχαίους ακεραίους. Η randrange δέχεται τουλάχιστον ένα όρισμα και επιστρέφει έναν τυχαίο αριθμό εντός του εύρους που καθορίζεται από τα ορίσματα:

  • randrange(stop): Παράγει έναν αριθμό από το 0 έως stop - 1.
  • randrange(start, stop): Παράγει έναν αριθμό από το start έως stop - 1.
  • randrange(start, stop, step): Παράγει έναν αριθμό από το start έως stop - 1, αυξανόμενο με βήματα step.

Παράδειγμα Χρήσης της randrange

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
for _ in range(10):
number = random.randrange(1, 7) # Παράγει αριθμούς από 1 έως 6
print(number)
for _ in range(10): number = random.randrange(1, 7) # Παράγει αριθμούς από 1 έως 6 print(number)
for _ in range(10):
    number = random.randrange(1, 7)  # Παράγει αριθμούς από 1 έως 6
    print(number)

Εξασφάλιση Επαναληψιμότητας Τυχαίων Ακολουθιών

Για να εξασφαλίσετε ότι μια τυχαία ακολουθία μπορεί να παραχθεί επαναλαμβανόμενα (π.χ., για αποσφαλμάτωση), μπορείτε να χρησιμοποιήσετε τη συνάρτηση seed της βιβλιοθήκης random. Η seed ορίζει την αρχική τιμή για την παραγωγή τυχαίων αριθμών, εξασφαλίζοντας έτσι ότι η ίδια ακολουθία αριθμών θα παραχθεί κάθε φορά που τρέχει το πρόγραμμα με την ίδια τιμή seed.

Παράδειγμα Χρήσης της seed

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
random.seed(0) # Ορίζει την αρχική τιμή για την παραγωγή τυχαίων αριθμών
for _ in range(10):
number = random.randrange(1, 7)
print(number)
random.seed(0) # Ορίζει την αρχική τιμή για την παραγωγή τυχαίων αριθμών for _ in range(10): number = random.randrange(1, 7) print(number)
random.seed(0)  # Ορίζει την αρχική τιμή για την παραγωγή τυχαίων αριθμών

for _ in range(10):
    number = random.randrange(1, 7)
    print(number)

Με την ίδια τιμή seed, η ακολουθία των τυχαίων αριθμών θα είναι η ίδια κάθε φορά που τρέχετε τον παραπάνω κώδικα.

Προσομοίωση Ρίξης Ενός Εξάπλευρου Ζαριού 13,000,000 Φορές

Αν η συνάρτηση randrange παράγει πραγματικά τυχαίους αριθμούς, τότε κάθε αριθμός στο εύρος της θα έχει ίση πιθανότητα εμφάνισης κάθε φορά που καλείται. Για να δείξουμε ότι οι επιφάνειες του ζαριού από το 1 έως το 6 εμφανίζονται με ίση πιθανότητα, μπορούμε να προσομοιώσουμε 13,000,000 ρίψεις ζαριού. Κάθε επιφάνεια του ζαριού θα πρέπει να εμφανίζεται περίπου 2,166,667 φορές στις 13,000,000 ρίψεις.

Παράδειγμα Προσομοίωσης Ρίξης Ζαριού

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import random
# Αρχικοποίηση μετρητών για κάθε επιφάνεια του ζαριού
die_counts = [0, 0, 0, 0, 0, 0]
# Προσομοίωση 13,000,000 ρίψεων ζαριού
for roll in range(13000000):
face = random.randrange(1, 7)
die_counts[face - 1] += 1
# Εμφάνιση των αποτελεσμάτων
for i, count in enumerate(die_counts, start=1):
print(f"Επιφάνεια {i}: {count} φορές")
import random # Αρχικοποίηση μετρητών για κάθε επιφάνεια του ζαριού die_counts = [0, 0, 0, 0, 0, 0] # Προσομοίωση 13,000,000 ρίψεων ζαριού for roll in range(13000000): face = random.randrange(1, 7) die_counts[face - 1] += 1 # Εμφάνιση των αποτελεσμάτων for i, count in enumerate(die_counts, start=1): print(f"Επιφάνεια {i}: {count} φορές")
import random

# Αρχικοποίηση μετρητών για κάθε επιφάνεια του ζαριού
die_counts = [0, 0, 0, 0, 0, 0]

# Προσομοίωση 13,000,000 ρίψεων ζαριού
for roll in range(13000000):
    face = random.randrange(1, 7)
    die_counts[face - 1] += 1

# Εμφάνιση των αποτελεσμάτων
for i, count in enumerate(die_counts, start=1):
    print(f"Επιφάνεια {i}: {count} φορές")

Ερμηνεία του Παραδείγματος

Στο παράδειγμα αυτό, δημιουργούμε μια λίστα die_counts με έξι στοιχεία, ένα για κάθε επιφάνεια του ζαριού, για να καταγράφουμε πόσες φορές εμφανίζεται κάθε αριθμός. Στη συνέχεια, προσομοιώνουμε 13,000,000 ρίψεις ζαριού, αυξάνοντας τον αντίστοιχο μετρητή κάθε φορά που εμφανίζεται μια επιφάνεια. Τέλος, εμφανίζουμε τον αριθμό των εμφανίσεων για κάθε επιφάνεια.

Η έξοδος αυτής της προσομοίωσης θα δείξει αν η randrange δημιουργεί πραγματικά τυχαίους αριθμούς με ίση πιθανότητα για κάθε αριθμό, όπως θα περιμέναμε από ένα δίκαιο ζάρι.

Ορισμός Σπόρου (Seed) για τον Παραγωγό Τυχαίων Αριθμών για Επαναληψιμότητα

Όταν χρησιμοποιείτε τυχαίους αριθμούς στα προγράμματά σας, ειδικά κατά τη διάρκεια της αποσφαλμάτωσης, είναι συχνά χρήσιμο να μπορείτε να παράγετε την ίδια ακολουθία τυχαίων αριθμών κάθε φορά που τρέχετε τον κώδικά σας. Αυτό είναι δυνατό με τη χρήση της συνάρτησης seed της βιβλιοθήκης random.

Ορισμός Σπόρου για Επαναληψιμότητα

Η συνάρτηση seed αρχικοποιεί τον παραγωγό τυχαίων αριθμών (random-number generator) με έναν συγκεκριμένο αριθμό, γνωστό ως σπόρος (seed). Όταν ορίζετε έναν σπόρο, η ακολουθία των τυχαίων αριθμών που παράγεται από τον παραγωγό θα είναι η ίδια κάθε φορά που τρέχετε τον κώδικά σας με τον ίδιο σπόρο.

Παράδειγμα Ορισμού Σπόρου

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import random
random.seed(0) # Ορισμός του σπόρου
# Παραγωγή μιας ακολουθίας τυχαίων αριθμών
for _ in range(5):
print(random.randrange(1, 100))
import random random.seed(0) # Ορισμός του σπόρου # Παραγωγή μιας ακολουθίας τυχαίων αριθμών for _ in range(5): print(random.randrange(1, 100))
import random

random.seed(0)  # Ορισμός του σπόρου

# Παραγωγή μιας ακολουθίας τυχαίων αριθμών
for _ in range(5):
    print(random.randrange(1, 100))

Με την παραπάνω προσέγγιση, ο παραγωγός τυχαίων αριθμών θα παράγει την ίδια ακολουθία αριθμών κάθε φορά που τρέχετε το πρόγραμμα με τον ίδιο σπόρο. Αυτό είναι ιδιαίτερα χρήσιμο για την αποσφαλμάτωση προγραμμάτων που βασίζονται σε τυχαία δεδομένα, καθώς επιτρέπει την επανάληψη και τη δοκιμή του κώδικα με συγκεκριμένη ακολουθία δεδομένων.

Περίπτωση Μελέτης: Προσομοίωση του Παιχνιδιού των Ζαριών “Craps”

Το “craps” είναι ένα δημοφιλές παιχνίδι με ζάρια που συνδυάζει την τύχη και τη στρατηγική. Ας δούμε πώς μπορούμε να προσομοιώσουμε αυτό το παιχνίδι χρησιμοποιώντας Python.

Κανόνες του Παιχνιδιού Craps

Πρώτη Ρίψη (Come Out Roll): Ρίχνετε δύο εξάπλευρα ζάρια.

  • Αν το άθροισμα είναι 7 ή 11, κερδίζετε.
  • Αν το άθροισμα είναι 2, 3 ή 12, χάνετε (αυτό αποκαλείται “craps”).
  • Για οποιοδήποτε άλλο άθροισμα (4, 5, 6, 8, 9, 10), το άθροισμα γίνεται το “point” σας.

Συνέχεια του Παιχνιδιού: Συνεχίζετε να ρίχνετε τα ζάρια μέχρι να:

  • Ρίξετε ξανά το “point” σας, και κερδίζετε.
  • Ρίξετε ένα 7 πριν από το “point” σας, και χάνετε.

Παράδειγμα Σεναρίου Προσομοίωσης

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import random
def roll_dice():
"""Ρίχνει δύο ζάρια και επιστρέφει το άθροισμά τους."""
return random.randint(1, 6) + random.randint(1, 6)
def play_craps():
"""Παίζει ένα γύρο του παιχνιδιού craps."""
point = roll_dice()
print(f"Ρίξατε {point}")
# Κανόνες για την πρώτη ρίψη
if point in (7, 11):
return "Κερδίσατε!"
elif point in (2, 3, 12):
return "Craps, χάσατε."
else:
# Συνέχεια του παιχνιδιού
print(f"Το point σας είναι {point}. Προσπαθήστε να το ρίξετε ξανά πριν το 7!")
while True:
roll = roll_dice()
print(f"Ρίξατε {roll}")
if roll == point:
return "Κερδίσατε!"
elif roll == 7:
return "Χάσατε."
# Παίξτε το παιχνίδι
result = play_craps()
print(result)
import random def roll_dice(): """Ρίχνει δύο ζάρια και επιστρέφει το άθροισμά τους.""" return random.randint(1, 6) + random.randint(1, 6) def play_craps(): """Παίζει ένα γύρο του παιχνιδιού craps.""" point = roll_dice() print(f"Ρίξατε {point}") # Κανόνες για την πρώτη ρίψη if point in (7, 11): return "Κερδίσατε!" elif point in (2, 3, 12): return "Craps, χάσατε." else: # Συνέχεια του παιχνιδιού print(f"Το point σας είναι {point}. Προσπαθήστε να το ρίξετε ξανά πριν το 7!") while True: roll = roll_dice() print(f"Ρίξατε {roll}") if roll == point: return "Κερδίσατε!" elif roll == 7: return "Χάσατε." # Παίξτε το παιχνίδι result = play_craps() print(result)
import random

def roll_dice():
    """Ρίχνει δύο ζάρια και επιστρέφει το άθροισμά τους."""
    return random.randint(1, 6) + random.randint(1, 6)

def play_craps():
    """Παίζει ένα γύρο του παιχνιδιού craps."""
    point = roll_dice()
    print(f"Ρίξατε {point}")

    # Κανόνες για την πρώτη ρίψη
    if point in (7, 11):
        return "Κερδίσατε!"
    elif point in (2, 3, 12):
        return "Craps, χάσατε."
    else:
        # Συνέχεια του παιχνιδιού
        print(f"Το point σας είναι {point}. Προσπαθήστε να το ρίξετε ξανά πριν το 7!")
        while True:
            roll = roll_dice()
            print(f"Ρίξατε {roll}")
            if roll == point:
                return "Κερδίσατε!"
            elif roll == 7:
                return "Χάσατε."

# Παίξτε το παιχνίδι
result = play_craps()
print(result)

Σε αυτό το σενάριο, η συνάρτηση play_craps προσομοιώνει ένα γύρο του παιχνιδιού craps. Αρχικά, ρίχνει τα ζάρια και ελέγχει το αποτέλεσμα βάσει των κανόνων του παιχνιδιού. Αν το παιχνίδι συνεχιστεί μετά την πρώτη ρίψη, ρίχνει τα ζάρια επαναληπτικά μέχρι να καθοριστεί ο νικητής ή ο ηττημένος.

Ας ερμηνεύσουμε βήμα προς βήμα το παράδειγμα της προσομοίωσης του παιχνιδιού craps:

Εισαγωγή Βιβλιοθήκης

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import random
import random
import random

Εδώ εισάγουμε την βιβλιοθήκη random της Python, η οποία παρέχει τις λειτουργίες για την παραγωγή τυχαίων αριθμών.

Ορισμός της Συνάρτησης για τη Ρίψη των Ζαριών

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
def roll_dice():
"""Ρίχνει δύο ζάρια και επιστρέφει το άθροισμά τους."""
return random.randint(1, 6) + random.randint(1, 6)
def roll_dice(): """Ρίχνει δύο ζάρια και επιστρέφει το άθροισμά τους.""" return random.randint(1, 6) + random.randint(1, 6)
def roll_dice():
    """Ρίχνει δύο ζάρια και επιστρέφει το άθροισμά τους."""
    return random.randint(1, 6) + random.randint(1, 6)

Η roll_dice είναι μια συνάρτηση που προσομοιώνει τη ρίψη δύο εξάπλευρων ζαριών. Χρησιμοποιεί τη συνάρτηση randint της βιβλιοθήκης random για να παράγει δύο τυχαίους αριθμούς από το 1 έως το 6 (που αντιστοιχούν στις επιφάνειες των ζαριών) και επιστρέφει το άθροισμά τους.

Ορισμός της Συνάρτησης για το Παιχνίδι Craps

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
def play_craps():
"""Παίζει ένα γύρο του παιχνιδιού craps."""
point = roll_dice()
print(f"Ρίξατε {point}")
def play_craps(): """Παίζει ένα γύρο του παιχνιδιού craps.""" point = roll_dice() print(f"Ρίξατε {point}")
def play_craps():
    """Παίζει ένα γύρο του παιχνιδιού craps."""
    point = roll_dice()
    print(f"Ρίξατε {point}")

Αυτή η συνάρτηση ξεκινά το παιχνίδι craps ρίχνοντας τα ζάρια με τη συνάρτηση roll_dice και αποθηκεύοντας το αποτέλεσμα στη μεταβλητή point. Στη συνέχεια, εκτυπώνει το αποτέλεσμα της πρώτης ρίψης.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
if point in (7, 11):
return "Κερδίσατε!"
elif point in (2, 3, 12):
return "Craps, χάσατε."
if point in (7, 11): return "Κερδίσατε!" elif point in (2, 3, 12): return "Craps, χάσατε."
if point in (7, 11):
    return "Κερδίσατε!"
elif point in (2, 3, 12):
    return "Craps, χάσατε."

Εδώ, η συνάρτηση ελέγχει το αποτέλεσμα της πρώτης ρίψης:

  • Αν το άθροισμα είναι 7 ή 11, ο παίκτης κερδίζει αμέσως.
  • Αν το άθροισμα είναι 2, 3 ή 12, ο παίκτης χάνει αμέσως (αυτό αποκαλείται “craps”).
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
else:
print(f"Το point σας είναι {point}. Προσπαθήστε να το ρίξετε ξανά πριν το 7!")
while True:
roll = roll_dice()
print(f"Ρίξατε {roll}")
if roll == point:
return "Κερδίσατε!"
elif roll == 7:
return "Χάσατε."
else: print(f"Το point σας είναι {point}. Προσπαθήστε να το ρίξετε ξανά πριν το 7!") while True: roll = roll_dice() print(f"Ρίξατε {roll}") if roll == point: return "Κερδίσατε!" elif roll == 7: return "Χάσατε."
else:
    print(f"Το point σας είναι {point}. Προσπαθήστε να το ρίξετε ξανά πριν το 7!")
    while True:
        roll = roll_dice()
        print(f"Ρίξατε {roll}")
        if roll == point:
            return "Κερδίσατε!"
        elif roll == 7:
            return "Χάσατε."

Αν το άθροισμα είναι οποιοδήποτε άλλο (4, 5, 6, 8, 9, 10), αυτό γίνεται το “point” του παίκτη. Ο παίκτης συνεχίζει να ρίχνει τα ζάρια μέχρι να επαναλάβει το “point” και να κερδίσει ή να ρίξει ένα 7 και να χάσει.

Εκτέλεση του Παιχνιδιού

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
result = play_craps()
print(result)
result = play_craps() print(result)
result = play_craps()
print(result)

Τέλος, τρέχουμε τη συνάρτηση play_craps για να παίξουμε ένα γύρο του παιχνιδιού και εκτυπώνουμε το αποτέλεσμα.

Αυτός ο κώδικας προσομοιώνει έναν πλήρη γύρο του παιχνιδιού craps, αποδεικνύοντας τις δυνατότητες της Python για την ανάπτυξη απλών παιχνιδιών και προσομοιώσεων.

10 Ιανουαρίου, 2024
top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων