🗒 Задача¶
Доработка задачи на авторизацию. Нужно написать часть модуля для авторизации пользователя. Для входа в приложение пользователь должен доказать, что он не бот. Для этого программа предлагает решить простой математический пример – сложить два числа. Имитируй эти действия в консоли, путем считывания данных с клавиатуры.
При успешном решении вход в программу символизируется сообщением “Добро пожаловать!". Дай пользователю три попытки пройти тест. Для этого придется каждый раз генерировать новый математический пример и предлагать решить его заново. Для простоты ограничься примерами на сложение с использованием цифр от 1 до 9. Если три попытки оказались неудачными, вывести сообщение "Доступ запрещен".
❌ Ошибки¶
- рекомендуем улучшать читабельность путем добавления дополнительных пустых строк — после блока с объявлением переменных и внутренние блоки с if
✏️ Комментарии¶
Когда цикл перестает работать (по условию) запускается код программы после. По сути нет смысла внутри делать эту проверку и гонять каждый раз, код тела условия можно разместить после цикла.
Для этого при успешной авторизации следует также полностью останавливать программу
Еще предлагаю немного улучшить читабельность (на большом количестве кода это сыграет в плюс). Рекомендую блок с объявлением переменных группировать отделять пустой строкой от всего остального кода, а также внутренние условные выражения сверху и снизу обосабливать пустыми строка. Чтобы визуально они выделялись
Старайся не использовать лейблы (loop в твоем случае).
Тут он вообще не нужен, но и в целом - метки затрудняют навигацию по коду, а необходимость их использования говорит о плохом проектировании метода.
Предлагаю сделать более юзерфрендли. чтобы пользователь вводил ответ на той же строке после знака равно
Представь, что количество попыток для каждого пользователя уникальное по разным причинам. такой маркетинг. тогда в программе будет недостаточно менять всего одно значение переменной счетчика, потребуется сложная логика по доработке.
При вводе текста или пустой строки ("") – выбрасывается ошибка NumberFormatException. Что значит, что ты пытаешься строку привести к целому числу .toInt(). вот пара вариантов решения:
Приведение типа к строке у нулябельной переменной это скорее костыль, чем решение. потому что toString() под капотом все переводит в строку. поэтому на будущее такие случаи лучше правильно обрабатывать операторами
А пусть вся логика будет происходить внутри цикла. чтобы лишний раз не повторялись действия. И при верном ответе цикл бы прерывался
🧾 Решение¶
fun main() {
var counter = 3
do {
val number1 = (1..9).random()
val number2 = (2..9).random()
println("Сложите два числа $number1 и $number2")
val answer = readln().toInt()
if (answer != number1 + number2) {
println("Не верно, осталось ${--counter} попыток")
} else {
println("Добро пожаловать!")
return
}
} while (counter > 0)
println("Доступ запрещен!")
}