2-4. Путаница в логике.

[М] Михаил Беркович, 5 ноября 2018, 20:41 , 3 подписчика

Доброго времени суток, Уважаемые коллеги. Задача 2-4. Сумма случайных бросков кубиков. Написал метод. Вставил в программу, но с суммой возникла путаница. Сначала был путаница с файлом ответа, но совместно с Михаилом её решили. Однако, то ли осознание пришло потом, то ли что-то ещё...

Гитом специально откатил до проблемного места, и вытащил сюда. Просьба коллег по цеху помочь разобраться в коде, кажется впервые "смотрю в код - вижу ассемблер" =Е

Результат такой: sum of 5, sum of 4, sum 6.......etc.

def show_rolling_dice
  100.times do
    print "#{rand(6) + 1}\r"
    sleep 0.001
  end
end

puts "How many dice?"
num = gets.to_i

num.times do
  array = []
  sum = 0
  show_rolling_dice
  puts rand(6) + 1
  array = rand(6) + 1
  sum += array
  puts  "sum of #{sum}"
end

Вот такой ответ в терминале, при выполнении.

6
2
4
2
sum of 2
5
2
3
2
sum of 6
2
1
2
5
sum of 4
2
3
6
sum of 5

RubyMine 2018.2.4 Build #RM-182.4505.55, built on October 8, 2018 JRE: 1.8.0_152-release-1248-b8 amd64 JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o Windows 10 10.0

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


Александр Мастяев

[А]

из цикла "do" вынеси создание массива и переменной sum, а также вывод результата И еще вот тут: puts rand(6) + 1 array = rand(6) + 1 у тебя каждый раз будет новое случайное число, т.е. в массив ты запишешь не то, что вывел на экран, поэтому сумма будет считаться неправильно. Запиши случайный выбор в переменную, а потом выведи её на экран и её же запишешь в свой массив.


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

[В]

Александр правильно всё сказал:

  puts rand(6) + 1
  array = rand(6) + 1

Вот в этот момент случайное число будет сгенерировано дважды:

  • Первый раз для вывода на экран
  • Второй раз для записи в array

Например, выведется 4, а запишется в array 2.

Если хотите зафиксировать это число, его надо сгенерировать 1 раз, записать в переменную и использовать её:

random_number = rand(6) + 1
puts random_number
sum += random_number