Es gibt im Grunde zwei Arten von Schleifen:
Beides ist in Julia möglich, wobei die zweite Variante häufiger vorkommt.
while-SchleifeFür Probleme ohne festes Ende, bei denen die Anzahl der Schleifendurchläufe im Voraus unbekannt ist, gibt es in Julia die while-Schleife.
Die Grundform ist recht einfach:
while condition
do_something()
end
In diesem Fall läuft das Programm so lange durch die Schleife, bis condition nicht mehr true ist.
Es gibt zwei Möglichkeiten, die Schleife vorzeitig zu verlassen:
break bricht die Schleife ab, und die Ausführung geht in der nächsten Zeile nach dem end der Schleife weiter.return x beendet die Ausführung der aktuellen Funktion und gibt den Rückgabewert x an den Aufrufer zurück.Mit diesen Möglichkeiten kann es manchmal praktisch sein, eine „unendliche“ Schleife mit while true ... end zu erzeugen und dann im Schleifenblock auf eine Abbruchbedingung zu warten, die ein break oder return auslöst.
Das einfachste Beispiel ist eine Schleife über einen Bereich.
Wenn wir etwas zehnmal machen wollen:
for n in 1:10
do_something(n)
end
Wenn die aktuelle Iteration eine Bedingung nicht erfüllt, kannst du mit einem continue sofort zur nächsten Iteration springen:
for n in 1:10
if is_useless(n)
continue
end
# we decided this iteration could be useful
do_something_slow(n)
end
In kürzerer Form lässt sich der if-Block durch is_useless(n) && continue ersetzen.
Über viele andere Arten von Sammlungen kann ebenfalls iteriert werden: Elemente in einem Array, Zeichen in einem String, Schlüssel in einem Wörterbuch …
Die bisherigen Beispiele durchlaufen den Bereich 1:10, bei dem der Wert gleichzeitig der Schleifenindex ist.
Allgemeiner kann auch der Index benötigt werden und nicht nur der Wert.
Dafür wird die Funktion eachindex() verwendet, zum Beispiel for i in eachindex(my_array) ... end.
Deine Freundin Li Mei betreibt eine Saftbar, in der sie köstliche gemischte Fruchtsäfte verkauft. Du bist ein häufiger Gast in ihrem Laden und hast erkannt, dass du deiner Freundin das Leben erleichtern könntest. Du beschließt, deine Programmierkenntnisse zu nutzen, um Li Mei bei ihrer Arbeit zu helfen.
Li Mei erzählt ihren Kundinnen und Kunden gerne im Voraus, wie lange sie auf einen Saft von der Karte warten müssen, den sie bestellt haben.
Es fällt ihr schwer, sich die genauen Zahlen zu merken, weil die Zeit, die zum Mixen der Säfte benötigt wird, variiert.
"Pure Strawberry Joy" dauert 0,5 Minuten, "Energizer" und "Green Garden" dauern jeweils 1,5 Minuten, "Tropical Island" dauert 3 Minuten und "All or Nothing" dauert 5 Minuten.
Für alle anderen Getränke (z. B. Sonderangebote) kannst du eine Zubereitungszeit von 2,5 Minuten annehmen.
Um deiner Freundin zu helfen, schreibe eine Funktion time_to_mix_juice, die einen Saft von der Karte als Argument entgegennimmt und die Anzahl der Minuten zurückgibt, die zum Mixen dieses Getränks benötigt werden.
julia> time_to_mix_juice("Tropical Island")
3
julia> time_to_mix_juice("Berries & Lime")
2.5
Viele von Li Meis Kreationen enthalten Limettenspalten, sei es als Zutat oder als Teil der Dekoration. Wenn sie morgens ihre Schicht beginnt, muss sie deshalb sicherstellen, dass der Behälter mit Limettenspalten für den kommenden Tag gut gefüllt ist.
Implementiere die Funktion limes_to_cut, die die Anzahl der Limettenspalten, die Li Mei schneiden muss, und ein Array entgegennimmt, das den Vorrat an ganzen Limetten darstellt, die sie zur Hand hat.
Aus einer "small" Limette erhält sie 6 Spalten, aus einer "medium" Limette 8 Spalten und aus einer "large" Limette 10 Spalten.
Sie schneidet die Limetten immer in der Reihenfolge, in der sie in der Liste erscheinen, beginnend mit dem ersten Element.
Sie macht so lange weiter, bis sie die Anzahl der benötigten Spalten erreicht hat oder bis ihr die Limetten ausgehen.
Li Mei möchte im Voraus wissen, wie viele Limetten sie schneiden muss.
Die Funktion limes_to_cut sollte die Anzahl der zu schneidenden Limetten zurückgeben.
julia> limes_to_cut(25, ["small", "small", "large", "medium", "small"])
4
Li Mei behält gerne den Überblick darüber, wie lange das Mixen der Bestellungen dauert, auf die Kundinnen und Kunden warten.
Implementiere die Funktion order_times, die eine Warteschlange von Bestellungen entgegennimmt und einen Vektor mit Mixzeiten zurückgibt.
julia> order_times(["Energizer", "Tropical Island"])
[1.5, 3.0]
Li Mei arbeitet immer bis 15 Uhr. Dann übernimmt ihr Angestellter Dmitry. Wenn Li Meis Schicht endet, sind oft Getränke bestellt, aber noch nicht zubereitet. Dmitry bereitet dann die restlichen Säfte zu.
Um die Übergabe zu erleichtern, implementiere eine Funktion remaining_orders, die die Anzahl der Minuten, die in Li Meis Schicht verbleiben, und ein Array von Säften entgegennimmt, die bestellt, aber noch nicht zubereitet wurden.
Die Funktion sollte die Bestellungen zurückgeben, die Li Mei nicht mehr vor dem Ende ihres Arbeitstags mit der Zubereitung beginnen kann.
Die verbleibende Zeit in der Schicht ist immer größer als 0. Das Array der zuzubereitenden Säfte ist nie leer. Außerdem werden die Bestellungen in der Reihenfolge zubereitet, in der sie im Array erscheinen. Wenn Li Mei anfängt, einen bestimmten Saft zu mixen, beendet sie ihn auch immer, selbst wenn sie etwas länger arbeiten muss. Wenn keine Bestellungen mehr übrig sind, um die sich Dmitry kümmern muss, sollte ein leerer Vektor zurückgegeben werden.
julia> remaining_orders(5, ["Energizer", "All or Nothing", "Green Garden"])
["Green Garden"]
Melde dich bei Exercism an, um Julia mit 35 Konzepte128 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.