Логика вашего кода на Ruby не такая же, как в версии Python, и в Python будет такой же неправильной, как и в Ruby.
("y" || "n")
- логическая операция над двумя строками;поскольку все строки в Ruby имеют значение true, результатом является первая строка. Следовательно, результат всей логической операции также равен true, поэтому unless
равно false и блок никогда не вводится.
Вы можете использовать include?
, чтобы сделать то же самое, что и версия Python:
unless ["y", "n"].include?(response) || guessed_it
, но вся версия Ruby может быть переведена гораздо проще:
def ask_yes_no(question)
puts question
response = nil
until ["y", "n"].include?(response) do
response = gets.downcase.strip
end
response
end