Я хотел бы выбрать имя случайным образом из списка массивов, а затем отобразить его либо в верхнем, либо в нижнем регистре.
Например, имена = ["Джеймс", "Джон", "Джейн"] Вывод должен быть: ДЖОН или Джон или Джейн или ДЖЕЙМС или ДЖЕЙН или Джеймс
Пожалуйста помоги!
Я попытался использовать команду .sample(), которая выбирает из массива. Кроме того, я знаю о .upcase() и .lowercase(), теперь проблема заключается в том, как объединить все эти методы вместе, чтобы получить желаемый результат, который состоит в том, чтобы случайным образом выбрать имя для списка массивов, а затем отобразить в либо заглавная, либо строчная.
def random_case(*names)
names= ["James", "John", "Jane"]
names.sample { |names| names.upcase names.downcase }
puts "Hello #{names}! How are you today?"
end
случайный_случай()
Я ожидаю, что на выходе будет ДЖОН, или Джон, или Джейн, или ДЖЕЙМС, или ДЖЕЙН, или Джеймс - случайным образом





Попробуй это
def random_case(names)
names.flat_map{|name| [name.upcase, name.downcase, name.capitalize]}.sample
end
names= ["James", "John", "Jane"]
puts random_case names
Я думаю, что код довольно прост для понимания. Какие-то проблемы? оставить комментарий, чтобы сообщить мне
Спасибо за помощь. Пожалуйста, смотрите следующий вопрос, и ваша помощь очень нужна -` stackoverflow.com/q/56864526/6651760
Привет @ChristopherEzimoha, приятно знать, что это помогает. Не могли бы вы сначала пометить это как решение, а затем переформатировать свой код в новом вопросе, чтобы другие могли его лучше видеть.
Пожалуйста, не просите ОП выбрать ваш ответ, это неприлично. Если бы ОП был ветераном SO, они бы просто проигнорировали запрос; этот ОП, явно новичок в SO, может не осознавать, что нет необходимости спешить с выбором ответа, что большинство участников ждут, по крайней мере, пару часов, прежде чем сделать это. Кристофер, вызывая каждый метод для каждого имени, а затем случайным образом выбирая один массив, как правило, является плохой практикой, лучше выбирать одно имя случайным образом, а затем вызывать каждый метод для этого имени.
Я бы начал с:
def random_case(*names)
name = names.sample # pick a random name
[true, false].sample ? name.upcase : name.downcase # return name with random format
end
random_case("James", "John", "Jane")
#=> "JAMES"
random_case("James", "John", "Jane")
#=> "john"
Вы можете сделать так.
names= ["James", "John", "Jane"]
random = [names.sample.upcase, names.sample.downcase].sample
puts "Hello #{random}! How are you today?"
Я бы написал методы два. Один для возврата случайного имени из списка имен:
def random_name(*names)
names.sample
end
и еще один для изменения регистра имени: (rand < 0.5 имеет 50% шанс быть true)
def random_case(name)
if rand < 0.5
name.upcase
else
name.downcase
end
end
Затем объедините оба:
5.times do
puts random_case(random_name("James", "John", "Jane"))
end
Выход:
JOHN
JOHN
jane
JAMES
james
Если вам не нравится подход rand < 0.5, вы также можете поместить оба варианта в массив и выбрать один случайным образом:
def random_case(name)
[name.upcase, name.downcase].sample
end
Или вы можете поместить имена методов :upcase и :downcase в массив, выбрать одно из них случайным образом и использовать public_send для вызова этого метода:
def random_case(name)
name.public_send([:upcase, :downcase].sample)
end
# 3?, # 2?, ?, потому что в большинстве случаев это не очень хорошая идея, и ОП может быть впечатлительным.
Ваши первые два предложения противоречивы. Как вы можете выбрать одно имя и вернуть объект (это строка?), который ссылается на все имена? Вы говорите: «...тогда отображайте либо прописными, либо строчными буквами». Ну, что это?