Задача 4-4. Проблема с оператором IF...else

[М] Мирослав , 7 февраля 2019, 05:58 , 3 подписчика

Здравствуйте ВОзникла проблема с задачей 4-4

Решил выполнить задачу пользуясь методом генерации случайных чисел, чтобы если выпадает 0, программа выдавала "Выпала решка", а если 1 - "Выпал орел"

if (rand(2) == 0)
  puts "Выпала решка"
elsif(rand(2)==1) 
  puts "Выпал орел"
end

НО!!!!!! Когда запускаю программу, помимо вариантов "Выпал орел" и "выпала решка" командная строка иногда выдает пустой экран. по этому я предположил, что помимо rand(2) == 0 и ** "rand(2) == 1** генератор случайных чисел выдает и третий вариант, по этому я добавил добавил код оператоpа **еlse puts "bingo"

if (rand(2) == 0)
  puts "Выпала решка"
elsif(rand(2)==1) 
  puts "Выпал орел"
else 
    puts"bingo"
end

Случилось так как и я предполагал: теперь командная строка в рандомном порядке выводит на экран "выпал орел", "выпала решка" и "bingo"

Подскажите пожалуйста, что я сделал неправильно - почему появляется "bingo" PS. У меня Windows 7,код пишу в SUblime Text 3.1.1 (BUILD 3176)

Обсуждение (2)


Вадим Венедиктов Учитель

[В]

Важно понимать, что rand(2) каждый раз при выводе возвращает новое случайное числи (0 или 1).

if (rand(2) == 0)
  puts "Выпала решка"
elsif(rand(2)==1) 
  puts "Выпал орел"
end

Вы по сути тут проверяете, выпал ли 0, если не выпал, то ещё раз кидаете и проверяете, выпал ли 1. И вот если сначала выпал 1 и потом выпал 0, то программа ничего не выведет.

Вам надо 1 раз кинуть монетку и сохранить результат в переменную:

coin = rand(2)

if coin == 0
  puts "Выпала решка"
elsif coin == 1
  puts "Выпал орел"
end

Тогда будет всё отлично (и с ребром тоже).


Михаил Бутлицкий Учитель

[М]

Каждый вызов rand заново вычисляет случайное значение. А вам надо монетку подбросить только один раз.

Поэтому только один вызов надо сохранить в переменную.

Но помните что ребро должно выпадать только 10% случаев, а функция rand работает равномерно.

Например rand(2) выберет одно из чисел 0,1 с одинаковой вероятностью, а rand(10) одно из 0,1,2,3,4,5,6,7,8,9. Это значит, что вероятность выбора из такого набора одного числа (например 9) всегда равна 10%.