Pętla repeat-until
Część sekcji Podstawy ścieżki Lua w Coddy. Lekcja 72 z 90.
Lua oferuje inny typ pętli o nazwie repeat-until, który ma wyjątkową cechę odróżniającą go od poznanej przed chwilą pętli while. Główna różnica polega na tym, że pętla repeat-until zawsze wykonuje swój blok kodu co najmniej raz, niezależnie od warunku.
Składnia wygląda tak:
repeat
-- kod do powtórzenia
until conditionZwróć uwagę, że warunek jest sprawdzany na końcu, gdy kod został już wykonany jeden raz. Pętla powtarza się dopóki warunek nie stanie się true — czyli odwrotnie niż w przypadku pętli while, która wykonuje się, gdy warunek jest true.
Oto praktyczny przykład symulujący rzucanie kostką aż do wyrzucenia 6:
local roll = 0
repeat
roll = math.random(1, 6) -- Losuje liczbę od 1 do 6
print("Rolled:", roll)
until roll == 6
print("Finally got a 6!")Ta pętla gwarantuje, że rzucisz kostką co najmniej raz, i wykonuje kolejne rzuty, aż warunek roll == 6 stanie się prawdziwy. To działanie „najpierw wykonaj, potem sprawdź” sprawia, że pętle repeat-until doskonale sprawdzają się w sytuacjach, w których coś musi wydarzyć się co najmniej raz, zanim zdecydujesz, czy kontynuować.
Wyzwanie
ŁatwyTworzysz prostą symulację sprawdzania hasła.
- Utwórz zmienną o nazwie
passwordi przypisz jej pusty ciąg znaków (""). - Utwórz kolejną zmienną o nazwie
correctPasswordi przypisz jej"secure123". - Utwórz tablicę o nazwie
attempts, która zawiera następujące próby wpisania hasła w tej kolejności:"password""123456""admin""secure123"
- Utwórz zmienną o nazwie
indexi przypisz jej wartość1. Użyjesz jej do śledzenia, która próba jest aktualnie sprawdzana. - Użyj pętli
repeat-until, aby:- Przypisać bieżącą próbę do
password, używającattempts[index]. Odczytuje to element z pozycjiindexw tablicy - Wypisać bieżące
password - Zwiększyć
indexo 1 (np.index = index + 1), aby przejść do następnej próby
- Przypisać bieżącą próbę do
- Pętla powinna zatrzymać się dopiero wtedy, gdy
passwordbędzie równecorrectPassword.
Za każdym razem, gdy pętla się wykonuje, odczytuje jedną próbę z tablicy, wypisuje ją, a następnie przechodzi do następnej. Pętla działa, dopóki nie zostanie znalezione prawidłowe hasło.
Spróbuj swoich sił
-- Zainicjalizuj zmienne
local password = ""
local correctPassword = "secure123"
-- Lista prób odgadnięcia hasła
local attempts = {"password", "123456", "admin", "secure123"}
local index = 1
-- TODO:
-- Użyj pętli repeat-until, aby:
-- 1. Przypisać bieżącej próbie dokładny tekst z instrukcji
-- 2. Wypisać wypróbowane hasło
-- 3. Przejść do następnej próby
-- Zatrzymaj się, gdy password będzie równe correctPasswordTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
4Operatory 2: relacyjne i logiczne
Operatory równościOperatory relacyjneOperator „and”Operator „or”Operator „not”Ewaluacja z krótkim spięciemWartości prawdziwe i fałszywePodsumowanie – prosta logika7Podstawy logiki warunkowej
Instrukcja if-thenInstrukcja if-then-elseInstrukcja elseifPowtórzenie — skrzynia skarbów10Tabele, część 1: styl listy
Czym jest tabela?Tworzenie tabeliDostęp do elementów według indeksuModyfikowanie elementów według indeksuOperator długości '#'table.insert()table.remove()Powtórzenie — zarządzanie członkami drużyny13Projekt: Prosty sklep z eliksirami
Konfiguracja projektuDodawanie eliksiru2Zmienne i typy danych
Czym jest zmienna?LiczbyŁańcuchy znakówWartości logiczneWartość „nil”Funkcja type()Konwencje nazewnictwaPowtórzenie — profil postaci5Podstawowe wyjście
Wyświetlanie literałówWyświetlanie zmiennychWyświetlanie wielu wartościŁączenie ciągów znaków i zmiennychFunkcja tostring()Dane wejścioweRzutowanie typówPowtórka — raport o statusiePowtórka — do 1208Podstawy manipulacji ciągami znaków
string.len()string.upper i string.lowerstring.sub()string.rep()string.find()Podsumowanie – formatuj nazwę użytkownika3Operatory 1: Arytmetyka i konkatenacja
Operatory arytmetyczneOperator moduloOperator potęgowaniaŁączenie ciągów znakówKolejność wykonywania operatorówPowtórka – proste obliczenia6Projekt: wyświetlanie statystyk postaci
Wiadomość powitalnaDeklarowanie statystyk postaci9Podstawy funkcji
Deklarowanie funkcjiWywoływanie funkcjiFunkcje z parametramiFunkcje z wieloma parametramiInstrukcja „return”Powtórzenie — kalkulator pola12Podstawy pętli
Pętla whilePętla repeat-untilNumeryczna pętla forPętla for z krokiemInstrukcja „break”Powtórka — odliczaniePoćwicz samodzielnie: Kompilator Lua online