проблема с небольшим скриптом ruby - PullRequest
1 голос
/ 12 марта 2011

я только начал изучать рубин. Теперь я пытаюсь написать небольшой скрипт, который играет проблему Монтихолла у меня проблема с последней строкой кода

numgames = 10000 # Number of games to play 
switch = true # Switch your guess?
wins = 0
numgames.times do doors = [0, 0, 0] # Three doors! 
doors[rand(3)] = 1 # One of them has a car! 
guess = doors.delete_at(rand(3)) # We pick one of them!
doors.delete_at(doors[0] == 0 ? 0 : 1) # Take out one of the remaining doors that is not a car! 
wins += switch ? doors[0] : guess end
puts "You decided #{switch ? "" : "not "}to switch, and your win % is #{wins.times ()/numgames}"

Ответы [ 3 ]

2 голосов
/ 12 марта 2011

В последней строке замените

wins.times ()

на

wins

times, возвращает Enumerator, что не очень хорошо с делением.

1 голос
/ 12 марта 2011

Две проблемы:

Сначала wins и numgames - целые числа, а целочисленное деление возвращает целое число:

irb(main):001:0> 6632 / 10000
=> 0

Итак, измените wins = 0 на wins = 0.0,Это вызовет деление с плавающей запятой, которое вернет ответ с плавающей запятой.

Во-вторых, wins - это число, а не массив.Так что избавьтесь от wins.times() и wins.size().Оба не правы.

С этими двумя изменениями я последовательно получаю около 66% побед, что говорит о том, что Мэрилин Вос Савант на путь умнее, чемЯ.

0 голосов
/ 12 марта 2011

Ваш wins является целым числом, поэтому вам не нужно .times или .size, однако вы хотите, чтобы .to_f перевел все в режим с плавающей запятой:

wins.to_f / numgames

А если вам нужен процент, то вам придется умножить на 100:

wins.to_f / numgames * 100

Вы также должны правильно сделать отступ для вашего кода для удобства чтения и разбить его на разрывы строк, чтобы было легче читать и легчедля парсера выяснить:

numgames = 10000 # Number of games to play
switch = true # Switch your guess?
wins = 0
numgames.times do
    doors = [0, 0, 0] # Three doors!
    doors[rand(3)] = 1 # One of them has a car!
    guess = doors.delete_at(rand(3)) # We pick one of them!
    doors.delete_at(doors[0] == 0 ? 0 : 1) # Take out one of the remaining doors that is not a car!
    wins += switch ? doors[0] : guess
end
puts "You decided #{switch ? "" : "not "}to switch, and your win % is #{100 * wins.to_f / numgames}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...