A
B B
C C C
D D D D
E E E E E
Я не знаю, как печатать алфавиты
Что вы пробовали, и где вы застряли?
1.upto(5) { |i| puts (64 + i).chr * i }
Это не для RUBY и не для любого другого языка, это просто поток:
Печатайте алфавиты, например:
for (ch = 'a'; ch <= 'z'; ch++)
{
System.out.println(ch);
}
i = 0char, i разЭтот вопрос был специально помечен рубином, поэтому за вас, вероятно, проголосовали
Это хороший ответ с использованием псевдокода, побуждающий оператора найти собственное решение.
@SagarPandya Я не согласен. Здесь был представлен процедурный подход, когда целевой язык является объектно-ориентированным и имеет сильные функциональные наклонности. Это не идиоматично для вопроса, в котором указан Ruby, как вы можете видеть, сравнивая это с ответом Рэя.
Вы можете сделать что-то вроде -
(1..5).each do |index|
(1..index).each do
print (64+index).chr
end
puts "\n"
end
Что оно делает -
Это даст вам результат -
A
BB
CCC
DDDD
EEEEE
Если вы хотите добавить что-то еще к тому, что вы печатаете, вы можете сделать что-то вроде:
print "#{(64+index).chr} - random text"
#{} конструкция позволит вам писать код, интерпретируемый ruby, внутри строкового блока`
Примечание: #{} работает только при использовании двойных кавычек :)
Вы зашли слишком глубоко, проверьте мой ответ, и расстояние между двумя символами будет намного лучше.
@ray - да, у тебя чище, так как ОП выглядел как новичок, я думал, что простые циклы будет легко понять
Лучше как можно быстрее приучить новичков к идиомам Ruby, таким как итераторы и замыкания, особенно потому, что они часто становятся чище, когда человек проходит мимо «но это по-другому!» фаза.
Вы можете сделать следующее, чтобы решить это:
('A'..'F').each.with_index(1) { |letter,index| puts "#{letter} "*index }
Альтернативы включают создание переменных диапазонов:
lower_limit = 'A' # could be read in rather than wired
upper_limit = 'F' # ditto
(lower_limit..upper_limit).each.with_index(1) { |letter,index| puts "#{letter} "*index }
или используя массив с join, чтобы получить пробелы без добавления завершающего пробела:
(lower_limit..upper_limit).each.with_index(1) { |letter,index| puts Array.new(index) { letter }.join(' ') }
Вам не нужен массив, просто используйте диапазон ('A'..'Z'). Также используйте each.with_index(1), чтобы не выполнять i + 1 на каждой итерации.
@SagarPandya Спасибо, отредактировано, это помогло, я просто не заметил этого в спешке.
Я думаю, что интерполяция n не нужна, и если бы вы назвали свои переменные letter, index, это могло бы добавить немного ясности. Хотя решение хорошее!
@JayDorsey Интерполяция - это чистый способ получения пробелов, но я согласен, что переименование переменных добавит ясности.
@pjs Вы правы, я не учитывал пробелы между строками (я даже не «видел» их, когда смотрел). Я просто предположил, что это шум копирования/вставки, а не неотъемлемая часть вывода. Но, согласно OP, в нем есть пробелы, поэтому интерполяция будет простым способом сделать это.
@JayDorsey Да, я всегда сохраняю ясность (хотя рельсы предполагают), работая над проектом, здесь пропущено, отредактировано. Интерполяция была добавлена только для пробелов.
@pjs извините за опоздание, вы можете пойти и отредактировать мой ответ для добавления.
Спасибо всем вам, это работа, и извините за мой поздний ответ.
Поскольку вы новый участник, я просто даю подсказку (процедуру) в качестве ответа, но вы должны реализовать ее самостоятельно...