Tracks
/
Python
Python
/
Übungen
/
Kernschmelze abwenden
Kernschmelze abwenden

Kernschmelze abwenden

Lernübung

Einführung

In Python verwendest du if-Anweisungen, elif (eine Zusammenziehung von „else and if“) und else-Anweisungen, um den Ablauf der Ausführung zu steuern und Entscheidungen in einem Programm zu treffen. Anders als viele andere Programmiersprachen bieten Python-Versionen 3.9 und darunter keine formale case-switch-Anweisung; stattdessen werden mehrere elif-Anweisungen für einen ähnlichen Zweck verwendet.

Python 3.10 führt eine Variante der case-switch-Anweisung namens structural pattern matching ein, die in einem anderen Konzept separat behandelt wird.

Bedingte Anweisungen verwenden Ausdrücke, die sich zu True oder False auflösen müssen, entweder indem direkt ein bool-Wert zurückgegeben wird oder indem sie als „truthy“ oder „falsy“ ausgewertet werden.

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

Kombiniert mit if wird ein optionaler else-Block ausgeführt, wenn die ursprüngliche if-Bedingung False ergibt:

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 erlaubt mehrere Auswertungen bzw. Verzweigungen.

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

Boolesche Operationen und Vergleiche lassen sich mit bedingten Anweisungen kombinieren, um komplexere Tests durchzuführen:

>>> 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'

Anleitung

In dieser Übung entwickeln wir ein einfaches Steuerungssystem für einen Kernreaktor.

Damit ein Reaktor Leistung erzeugt, muss er sich im Zustand der Kritikalität befinden. Ist der Reaktor weniger als kritisch, kann er beschädigt werden. Geht der Reaktorzustand über die Kritikalität hinaus, kann er überlasten und eine Kernschmelze verursachen. Wir wollen die Wahrscheinlichkeit einer Kernschmelze verringern und den Reaktorzustand richtig steuern.

Die folgenden drei Aufgaben drehen sich alle darum, Code zu schreiben, der den idealen Reaktorzustand aufrechterhält.

1. Kritikalität prüfen

Das Erste, was ein Steuerungssystem tun muss, ist zu prüfen, ob der Reaktor in seiner Kritikalität ausgeglichen ist. Ein Reaktor gilt als kritikalitätsausgeglichen, wenn er die folgenden Bedingungen erfüllt:

  • Die Temperatur ist kleiner als 800 K.
  • Die Anzahl der pro Sekunde emittierten Neutronen ist größer als 500.
  • Das Produkt aus Temperatur und pro Sekunde emittierten Neutronen ist kleiner als 500000.

Implementiere die Funktion is_criticality_balanced(), die temperature in Kelvin und neutrons_emitted als Parameter entgegennimmt und True zurückgibt, wenn die Kritikalitätsbedingungen erfüllt sind, sonst False.

>>> is_criticality_balanced(750, 600)
True

2. Den Bereich der Ausgangsleistung bestimmen

Sobald der Reaktor Leistung erzeugt, muss sein Wirkungsgrad bestimmt werden. Der Wirkungsgrad lässt sich in 4 Bereiche einteilen:

  1. green -> Wirkungsgrad von 80 % oder mehr,
  2. orange -> Wirkungsgrad unter 80 %, aber mindestens 60 %,
  3. red -> Wirkungsgrad unter 60 %, aber noch 30 % oder mehr,
  4. black -> weniger als 30 % Wirkungsgrad.

Der Prozentwert lässt sich als (generated_power/theoretical_max_power)*100 berechnen, wobei generated_power = voltage * current ist. Beachte, dass der Prozentwert meist keine Ganzzahl ist, achte also auf die richtige Verwendung der Vergleiche < und <=.

Implementiere die Funktion reactor_efficiency(<voltage>, <current>, <theoretical_max_power>) mit drei Parametern: voltage, current und theoretical_max_power. Diese Funktion soll den Wirkungsgradbereich des Reaktors zurückgeben: 'green', 'orange', 'red' oder 'black'.

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

3. Fail-Safe-Mechanismus

In deiner letzten Aufgabe geht es darum, einen Fail-Safe-Mechanismus zu erstellen, um Überlastung und Kernschmelze zu vermeiden. Dieser Mechanismus bestimmt, ob der Reaktor unter, genau auf oder über dem idealen Kritikalitätsschwellenwert liegt. Die Kritikalität kann dann erhöht, verringert oder gestoppt werden, indem Steuerstäbe in den Reaktor eingefahren (oder herausgezogen) werden.

Implementiere die Funktion fail_safe(), die 3 Parameter entgegennimmt: temperature in Kelvin, neutrons_produced_per_second und threshold, und einen Statuscode für den Reaktor ausgibt.

  • Wenn temperature * neutrons_produced_per_second < 90 % von threshold ist, gib den Statuscode 'LOW' aus, der anzeigt, dass die Steuerstäbe herausgezogen werden müssen, um Leistung zu erzeugen.

  • Wenn der Wert temperature * neutrons_produced_per_second innerhalb von 10 % des threshold liegt (also 0-10 % unter dem Schwellenwert, genau am Schwellenwert oder 0-10 % darüber), befindet sich der Reaktor in Kritikalität und es soll der Statuscode 'NORMAL' ausgegeben werden. Er zeigt an, dass der Reaktor in optimalem Zustand ist und die Steuerstäbe ideal positioniert sind.

  • Wenn temperature * neutrons_produced_per_second nicht in den oben genannten Bereichen liegt, steuert der Reaktor auf eine Kernschmelze zu und es muss der Statuscode 'DANGER' übergeben werden, um den Reaktor sofort abzuschalten.

>>> fail_safe(temperature=1000, neutrons_produced_per_second=30, threshold=5000)
'DANGER'
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Python Exercism

Bereit, mit Kernschmelze abwenden zu starten?

Melde dich bei Exercism an, um Python mit 17 Konzepte146 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.