🦊 FoxWiki

Ввод данных

До этого момента все данные в программах были жёстко заданы в коде: числа, строки, условия. Но настоящая программа должна общаться с пользователем — спрашивать имя, принимать команды, получать настройки.

Для этого в Lua есть функция read().


Базовое использование

read() ждёт пока пользователь введёт строку и нажмёт Enter. Возвращает введённый текст как строку:

Редактор Lua
1
2
3

Программа замирает на read() и ничего не делает, пока пользователь не нажмёт Enter. Это не баг — так и задумано.


Ввод числа

read() всегда возвращает строку. Если нужно число — конвертируй через tonumber():

Редактор Lua
1
2
3
4
5
6
7
8
9

Повтор ввода при ошибке

Валидируй ввод в цикле — не останавливайся на первой попытке:

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

Скрытый ввод (пароль)

Второй параметр read() — символ маскировки. Всё что вводит пользователь заменяется этим символом на экране:

Редактор Lua
1
2
3
4
5
6
7
8

Ввод с вариантами по Tab (автодополнение)

read() поддерживает автодополнение — передай таблицу вариантов вторым аргументом (после маски):

Редактор Lua
1
2
3
4
5

Пользователь нажимает Tab — терминал подставляет подходящий вариант.


Интерактивное меню

Классический паттерн — меню выбора:

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

REPL — цикл команд

Более гибкий подход — принимать команды как строки и разбирать их:

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

Ввод да/нет

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

Конфигуратор при первом запуске

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

🚀 Задания

Задание 1 Напиши программу-калькулятор: просит ввести два числа и знак операции (+, -, *, /). Выводит результат. Обрабатывает деление на ноль и нечисловой ввод.

Задание 2 Напиши программу-угадайку: загадай число от 1 до 100 через math.random. Читай числа от пользователя через read(), подсказывай "больше" или "меньше". Считай попытки.

Задание 3 Создай интерактивное меню управления черепашкой: вперёд (w), назад (s), влево (a), вправо (d), вверх (q), вниз (e), стоп (stop). Каждая команда — один шаг в нужном направлении.

Задание 4 Напиши функцию readNumber(prompt, min, max) из примера выше. Добавь поддержку "exit" — если пользователь введёт это слово вместо числа, функция возвращает nil.

Задание 5 Напиши систему паролей с тремя попытками. После трёх неверных попыток — вывести "Аккаунт заблокирован" и завершить программу через os.shutdown(). При верном пароле — вывести приветствие с именем пользователя (спросить после успешного входа).

НазадGPS навигация
ДалееЛогические операторы