🗒 Задача¶
Для алгоритма простого приложения-лотереи, нужно угадать два числа от 0 до 42. Если угадать только одно – игрок получает утешительный приз. Напиши программу, проверяющую выигрыш. Пользователь должен вводить числа в консоль. Правильные числа заранее известны и хранятся в переменных. Оформить ввод текстовыми подсказками о том, что нужно вводить. Вывести отдельным сообщением, какие числа были нужны для победы.
-
если оба числа угаданы вывести “Поздравляем! Вы выиграли главный приз!”;
-
если угадано только одно число, вывести “Вы выиграли утешительный приз!”;
-
если не угадано ничего, вывести “Неудача!”;
-
программа должна учитывать ввод чисел в обратном порядке.
❌ Ошибки¶
-
не используют else if — нужно делать все в общем условии if
-
не проверяются выигрышные числа в обратном порядке ввода
-
не ошибка — даем рекомендации по правильному переносу длинного выражения
✏️ Комментарии¶
Раз уже тут используем продвинутые темы, предлагаю доработать. Пусть два выигрышных числа будут списком (или массивом). И проверка будет заключаться в том, есть ли введенные числа пользователем в списке. например методом contains
Слишком длинная строка (больше 120 символов), как правило в крупных и средних компаниях есть системы проверяющие код, которые не пропустят такое форматирование (например [Detekt](https://detekt.dev/docs/rules/formatting/#maximumlinelength)). Давай добавим переносы
Официальная Kotlin Coding Conventions не дает строгих указаний на тему переноса строк внутри условий. Но на моей практике всегда было так. для длинных условий if, которые не помещаются в одну строку, делаем перенос строки после оператора || или &&.
- можно использовать постфиксный инкремент для более короткой формы `i++`
- тк тело условия однострочное и короткое, можно его поместить на той же строке, где определен `if` и опустить фигурные скобки
🧾 Решение¶
fun main() {
val number1 = (0..42).random()
val number2 = (0..42).random()
println("Введите два числа по очереди")
val firstNumber = readln().toInt()
val secondNumber = readln().toInt()
if ((firstNumber == number1 && secondNumber == number2) || (firstNumber == number2 && secondNumber == number1))
println(
"Поздравляем, вы выиграли главный приз! \n" +
"Загаданные числа $number1 и $number2")
else if ((firstNumber == number1 && secondNumber != number2) || (firstNumber != number1 && secondNumber == number2))
println("Поздравляем, вы выиграли утешительный приз! \n" +
"Загаданные числа $number1 и $number2")
else
println("Неудача! \n" +
"Загаданные числа $number1 и $number2")
}
fun main() {
val number1 = 15
val number2 = 28
print("Введите первое число от 0 до 42: ")
val userNumber1 = readln().toIntOrNull()
print("Введите второе число от 0 до 42: ")
val userNumber2 = readln().toIntOrNull()
val isWinning = (userNumber1 == number1 && userNumber2 == number2) || (userNumber1 == number2 && userNumber2 == number1)
if (isWinning) {
println("Поздравляем! Вы выиграли главный приз!")
} else if (userNumber1 == number1 || userNumber1 == number2 || userNumber2 == number1 || userNumber2 == number2) {
println("Вы выиграли утешительный приз!")
} else {
println("Неудача!")
}
println("Правильные числа для победы были $number1 и $number2.")
}
fun main() {
val winningNumber1 = 7
val winningNumber2 = 24
println("Введите первое число (от 0 до 42):")
val userNumber1 = readln().toIntOrNull()
println("Введите второе число (от 0 до 42):")
val userNumber2 = readln().toIntOrNull()
if (userNumber1 != null && userNumber2 != null) {
when {
(userNumber1 == winningNumber1 && userNumber2 == winningNumber2) ||
(userNumber1 == winningNumber2 && userNumber2 == winningNumber1) ->
println("Поздравляем! Вы выиграли главный приз!")
userNumber1 == winningNumber1 || userNumber1 == winningNumber2 ||
userNumber2 == winningNumber1 || userNumber2 == winningNumber2 ->
println("Вы выиграли утешительный приз!")
else -> println("Неудача!")
}
println("Выигрышные числа были: $winningNumber1 и $winningNumber2")
} else {
println("Некорректный ввод данных")
}
}
fun main() {
val winningNumber1 = Random.nextInt(0, 43)
val winningNumber2 = Random.nextInt(0, 43)
var correctAnswersCount = 0
println("""
Добро пожаловать в розыгрыш лотереи!
У вас 2 попытки. Возможны диапазон ответов от 0 до 42.
Если угождаете одно число - получите утешительный приз! Если два - главный приз!
""".trimIndent())
println("Введите первое число.")
val firstNumber = readln().toInt()
println("Введите второе число.")
val secondNumber = readln().toInt()
println("$winningNumber1, $winningNumber2")
if (firstNumber == winningNumber1 || firstNumber == winningNumber2) ++correctAnswersCount
if (secondNumber == winningNumber1 || secondNumber == winningNumber2) ++correctAnswersCount
val resultMessage = when(correctAnswersCount) {
2 -> "Поздравляем! Вы выиграли главный приз!"
1 -> "Вы выиграли утешительный приз!"
else -> "Неудача!"
}
println(resultMessage)
}