我试图编写用户在直角三角形中打印输入数字的代码。例如,如果输入8
,则应如下所示:
*
**
* *
* *
* *
* *
* *
********
1
12
123
1234
12345
123456
1234567
123345678
我试图让它发挥作用:
puts " Enter a number: "
number = gets.to_i
puts "*" * number
count = 0
while count < number - 2
print "*"
print " " * (number - 2)
puts "*"
count += 1
end
puts "*" * number
结果是一个正方形。这就是我得到的:
*****
* *
* *
* *
*****
我哪里错了?
答案 0 :(得分:2)
意外广场的顶部来自这条线
puts " Enter a number: "
number = gets.to_i
--> puts "*" * number <--
你的右边并不倾斜,因为number
的价值没有改变。您应该使用count
代替
答案 1 :(得分:1)
下面是一种替代方法,在这种方法中,您可以解耦创建行的逻辑以及行中应该存在的内容
def run(how_many_rows, &display_block)
how_many_rows.times do |row_index|
to_display = display_block.call(row_index)
puts(to_display)
end
end
how_many_rows = gets.to_i
run(how_many_rows) do |row|
Array.new(row + 1) do |idx|
is_first_char = idx == 0
is_last_char = idx == row
is_last_row = (row + 1) == how_many_rows
show_star = is_first_char || is_last_char || is_last_row
if show_star
'*'
else
' '
end
end.join
end
run(how_many_rows) do |row|
(1..(row + 1)).to_a.join
end