我正在尝试制作一个7 x 6游戏板。
行将命名为A到F
列的编号从1到7
所需输出
|| A1 | A2 | A3 | A4 | A5 | A6 | A7 ||
|| B1 | B2 | B3 | B4 | B5 | B6 | B7 ||
|| C1 | C2 | C3 | C4 | C5 | C6 | C7 ||
|| D1 | D2 | D3 | D4 | D5 | D6 | D7 ||
|| E1 | E2 | E3 | E4 | E5 | E6 | E7 ||
|| F1 | F2 | F3 | F4 | F5 | F6 | F7 ||
解决方案可能会使用while循环
letter = "A"
number = 1
while letter < "G"
puts "|| "
while number < 8
puts "#{letter}#{number} |"
number += 1
end
letter = letter.next.ord.chr
number = 1
end
当我在IRB中运行代码时,我得到以下输出。
||
A1 |
A2 |
A3 |
A4 |
A5 |
A6 |
A7 |
||
B1 |
B2 |
B3 |
B4 |
B5 |
B6 |
B7 |
||
C1 |
C2 |
C3 |
C4 |
C5 |
C6 |
C7 |
||
D1 |
D2 |
D3 |
D4 |
D5 |
D6 |
D7 |
||
E1 |
E2 |
E3 |
E4 |
E5 |
E6 |
E7 |
||
F1 |
F2 |
F3 |
F4 |
F5 |
F6 |
F7 |
如何修复此输出,以便每行显示七个字母数组合?
感谢任何帮助
答案 0 :(得分:3)
这是一种非常混乱的方式。大多数情况下,您应该遍历小集或范围:
('A'..'F').each do |l|
puts '|| %s ||' % [
(1..7).collect do |i|
'%s%d' % [ l, i ]
end.join(' | ')
]
end
构成解决方案的某些部分并将其传递给链条通常是一种更好的策略,而不是让低级别部件进行大量繁重工作。这种方法相当模块化,有很好的定义点可以更改分隔符,单个方块的格式以及整体框架结构。
答案 1 :(得分:3)
(0..41).each do
|i| y, x = i.divmod(7)
print x == 0 ? "|| " : " | "
print %w[A B C D E F][y]
print x + 1
print " ||\n" if x == 6
end
答案 2 :(得分:2)
您需要停止换行。在必要时使用print
而不是puts
。
e.g ./
letter = "A"
number = 1
while letter < "G"
print "||"
while number < 8
print " #{letter}#{number} |"
number += 1
end
puts "|"
letter = letter.next.ord.chr
number = 1
end
答案 3 :(得分:2)
另一种方式,没有内循环:
combis = %w(A B C D E F).product %w(1 2 3 4 5 6 7)
combis.each_slice(7){|row| puts "|| #{ row.map(&:join).join(' | ') } ||"}
答案 4 :(得分:0)
另一种方式:
def print_it(last_ltr, last_nbr)
('A'.."#{last_ltr}").each { |l|
puts ['||', *(" #{l}1 |".." #{l}#{last_nbr} |").to_a, '|'].join }
end
print_it('F', 7)
|| A1 | A2 | A3 | A4 | A5 | A6 | A7 ||
|| B1 | B2 | B3 | B4 | B5 | B6 | B7 ||
|| C1 | C2 | C3 | C4 | C5 | C6 | C7 ||
|| D1 | D2 | D3 | D4 | D5 | D6 | D7 ||
|| E1 | E2 | E3 | E4 | E5 | E6 | E7 ||
|| F1 | F2 | F3 | F4 | F5 | F6 | F7 ||