Διαδρομές
/
Python
Python
/
Ασκήσεις
/
Αποτροπή κατάρρευσης
Αποτροπή κατάρρευσης

Αποτροπή κατάρρευσης

Άσκηση εκμάθησης

Εισαγωγή

Στην Python, οι εντολές if, elif (σύντμηση του 'else and if') και else χρησιμοποιούνται για να ελέγχεις τη ροή της εκτέλεσης και να παίρνεις αποφάσεις μέσα σε ένα πρόγραμμα. Σε αντίθεση με πολλές άλλες γλώσσες προγραμματισμού, οι εκδόσεις της Python 3.9 και παλαιότερες δεν προσφέρουν μια επίσημη εντολή case-switch, αλλά χρησιμοποιούν πολλαπλές εντολές elif για παρόμοιο σκοπό.

Η Python 3.10 εισάγει μια παραλλαγή της εντολής case-switch, που ονομάζεται structural pattern matching και θα καλυφθεί ξεχωριστά σε άλλη ενότητα.

Οι εντολές υπό συνθήκη χρησιμοποιούν εκφράσεις που πρέπει να καταλήγουν σε True ή False, είτε επιστρέφοντας απευθείας έναν τύπο bool, είτε αξιολογούμενες ως "truthy" ή "falsy".

x = 10
y = 5

# The comparison '>' returns the bool 'True',
# so the statement is printed.
if x > y:
    print("x is greater than y")
...
>>> x is greater than y

Όταν συνδυάζεται με if, ένα προαιρετικό μπλοκ κώδικα else εκτελείται όταν η αρχική συνθήκη του if αξιολογείται σε False:

x = 5
y = 10

# The comparison '>' here returns the bool 'False',
# so the 'else' block is executed instead of the 'if' block.
if x > y:
    print("x is greater than y")
else:
    print("y is greater than x")
...
>>> y is greater than x

Το elif επιτρέπει πολλαπλές αξιολογήσεις/διακλαδώσεις.

x = 5
y = 10
z = 20

# The 'elif' statement allows for the checking of more conditions.
if x > y:
    print("x is greater than y and z")
elif y > z:
    print("y is greater than x and z")
else:
    print("z is greater than x and y")
...
>>> z is greater than x and y

Οι πράξεις Boolean και οι συγκρίσεις μπορούν να συνδυαστούν με εντολές υπό συνθήκη για πιο σύνθετους ελέγχους:

>>> def classic_fizzbuzz(number):
        if number % 3 == 0 and number % 5 == 0:
            say = 'FizzBuzz!'
        elif number % 5 == 0:
            say = 'Buzz!'
        elif number % 3 == 0:
            say = 'Fizz!'
        else:
            say = str(number)
        
        return say

>>> classic_fizzbuzz(15)
'FizzBuzz!'

>>> classic_fizzbuzz(13)
'13'

Οδηγίες

Σε αυτή την άσκηση θα αναπτύξουμε ένα απλό σύστημα ελέγχου για έναν πυρηνικό αντιδραστήρα.

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

Οι επόμενες τρεις εργασίες σχετίζονται όλες με τη συγγραφή κώδικα για τη διατήρηση της ιδανικής κατάστασης του αντιδραστήρα.

1. Έλεγξε την κρισιμότητα

Το πρώτο πράγμα που πρέπει να κάνει ένα σύστημα ελέγχου είναι να ελέγξει αν ο αντιδραστήρας είναι ισορροπημένος ως προς την κρισιμότητα. Λέμε ότι ένας αντιδραστήρας είναι ισορροπημένος ως προς την κρισιμότητα αν πληροί τις εξής συνθήκες:

  • Η θερμοκρασία είναι μικρότερη από 800 K.
  • Ο αριθμός των νετρονίων που εκπέμπονται ανά δευτερόλεπτο είναι μεγαλύτερος από 500.
  • Το γινόμενο της θερμοκρασίας και των νετρονίων που εκπέμπονται ανά δευτερόλεπτο είναι μικρότερο από 500000.

Υλοποίησε τη συνάρτηση is_criticality_balanced() που δέχεται ως παραμέτρους τη temperature σε kelvin και τα neutrons_emitted, και επιστρέφει True αν πληρούνται οι συνθήκες κρισιμότητας, False αν όχι.

>>> is_criticality_balanced(750, 600)
True

2. Προσδιόρισε το εύρος ισχύος εξόδου

Μόλις ο αντιδραστήρας αρχίσει να παράγει ισχύ, πρέπει να προσδιοριστεί η απόδοσή του. Η απόδοση μπορεί να χωριστεί σε 4 ζώνες:

  1. green -> απόδοση 80% ή περισσότερο,
  2. orange -> απόδοση μικρότερη από 80% αλλά τουλάχιστον 60%,
  3. red -> απόδοση κάτω από 60%, αλλά ακόμα 30% ή περισσότερο,
  4. black -> απόδοση μικρότερη από 30%.

Η ποσοστιαία τιμή μπορεί να υπολογιστεί ως (generated_power/theoretical_max_power)*100 όπου generated_power = voltage * current. Σημείωσε ότι η ποσοστιαία τιμή συνήθως δεν είναι ακέραιος αριθμός, οπότε φρόντισε να λάβεις υπόψη τη σωστή χρήση των συγκρίσεων < και <=.

Υλοποίησε τη συνάρτηση reactor_efficiency(<voltage>, <current>, <theoretical_max_power>), με τρεις παραμέτρους: voltage, current και theoretical_max_power. Αυτή η συνάρτηση πρέπει να επιστρέφει τη ζώνη απόδοσης του αντιδραστήρα: 'green', 'orange', 'red' ή 'black'.

>>> reactor_efficiency(200,50,15000)
'orange'

3. Μηχανισμός ασφαλείας

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

Υλοποίησε τη συνάρτηση fail_safe(), που δέχεται 3 παραμέτρους: τη temperature σε kelvin, τα neutrons_produced_per_second και το threshold, και επιστρέφει έναν κωδικό κατάστασης για τον αντιδραστήρα.

  • Αν temperature * neutrons_produced_per_second < 90% του threshold, επέστρεψε τον κωδικό κατάστασης 'LOW' που δείχνει ότι πρέπει να αφαιρεθούν ράβδοι ελέγχου για να παραχθεί ισχύς.

  • Αν η τιμή temperature * neutrons_produced_per_second βρίσκεται εντός 10% του threshold (δηλαδή είτε 0-10% λιγότερο από το threshold, στο threshold, είτε 0-10% περισσότερο από το threshold), ο αντιδραστήρας βρίσκεται σε κρισιμότητα και πρέπει να επιστραφεί ο κωδικός κατάστασης 'NORMAL', που δείχνει ότι ο αντιδραστήρας βρίσκεται σε άριστη κατάσταση και ότι οι ράβδοι ελέγχου βρίσκονται σε ιδανική θέση.

  • Αν το temperature * neutrons_produced_per_second δεν βρίσκεται στα παραπάνω εύρη, ο αντιδραστήρας οδεύει προς τήξη και πρέπει να επιστραφεί ο κωδικός κατάστασης 'DANGER' για να κλείσει αμέσως ο αντιδραστήρας.

>>> fail_safe(temperature=1000, neutrons_produced_per_second=30, threshold=5000)
'DANGER'
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Python Exercism

Έτοιμος να ξεκινήσεις την άσκηση Αποτροπή κατάρρευσης;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Python με 17 έννοιες146 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.