#ruby
Вот пример кода: for x in 1..79 puts "reg#{x}" for y in 1..20 puts "reg#{x}-#{y}" end x = x + 1 end Переменные x и y в нём - числа, поэтому результат выглядит так: reg1-1 ... reg79-1 ... Я бы хотел получить результат в виде "reg01-01 ... reg79-01..." и т. д. Вопрос: можно ли сделать это, например, заранее задав тип переменной (если такой тип существует)? Или нумерация вида 01, 02, 03 - это всегда будет string и арифметических действий с ней не проделать? Вариант с костылём в виде условия, добавляющего 0 куда надо, хочу обдумывать в последнюю очередь.
Ответы
Ответ 1
Во-первых x = x + 1 эта строчка не нужна, x и так проходит по 1..79 с интервалом в единицу. Во-вторых такой код принято писать так: (1..79).each do |x| puts "reg#{x}" (1..20).each do |y| puts "reg#{x}-#{y}" end end Ну а собственно вывести число с нулями спереди можно так: x.to_s.rjust(2, '0') где 2 -- длина числа в символах. Т.е. (1..79).each do |x| x_str = x.to_s.rjust(2, '0') puts "reg#{x_str}" (1..20).each do |y| y_str = y.to_s.rjust(2, '0') puts "reg#{x_str}-#{y_str}" end endОтвет 2
a=[] (1..79).each do |v| (1..20).each do |v2| a<<'reg'+sprintf('%02d', v)+'-'+sprintf('%02d', v2) end end puts a https://www.youtube.com/watch?v=f5mR02LV7qsОтвет 3
Класс String имеет метод %, реализующий классический printf: 1.upto 79 do |x| puts "reg%02d" % x 1.upto 20 do |y| puts "reg%02d-%02d" % [x, y] end end
Комментариев нет:
Отправить комментарий