ASCII 艺术和数字
ASCII art and numbers
我正在尝试编写代码,在直角三角形中打印用户输入的数字。例如,如果输入 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
结果是一个正方形。这是我得到的:
*****
* *
* *
* *
*****
我哪里错了?
你意外方块的顶部来自这条线
puts " Enter a number: "
number = gets.to_i
--> puts "*" * number <--
而且你的右侧没有倾斜,因为 number
的值没有改变。您应该使用 count
而不是
下面是另一种方法,您可以将创建行的逻辑与该行中应该出现的内容分离
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
我正在尝试编写代码,在直角三角形中打印用户输入的数字。例如,如果输入 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
结果是一个正方形。这是我得到的:
*****
* *
* *
* *
*****
我哪里错了?
你意外方块的顶部来自这条线
puts " Enter a number: "
number = gets.to_i
--> puts "*" * number <--
而且你的右侧没有倾斜,因为 number
的值没有改变。您应该使用 count
而不是
下面是另一种方法,您可以将创建行的逻辑与该行中应该出现的内容分离
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