Здравствуйте ВОзникла проблема с задачей 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)
Важно понимать, что 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%.