对于个人作业,我正在尝试使用数字时钟程序来显示“大”数字。
一个ruby程序,其中部分时钟来自存储在数组中的字符串,然后是一个例程(尚未完全编写),可以将任何数字显示为“大数字”。
这是为了帮助我学习更多关于操纵哈希和迭代数组,连接字符串等的信息。
我现在被困住了:
all_nums=''
(0..3).each do |num|
all_nums+= (line_parts[num][0].values).to_s
#puts line_parts[num][0].values
end
puts all_nums
因为我找回了无法转换为字符串的数组元素,即
ruby digital_clock,rb
[" == "]["| | "]["| | "][" == "]
但是当我只是puts
时(从底部注释掉第3行)就可以了,但是,我得到字符串,即
ruby digital_clock.rb
==
| |
| |
==
我希望能够构建字符串(在这种情况下为大0),但我只能把它们分开,我无法将它们分配给变量并打印出来。我怎么能这样做?
完整的计划是:
top= ' == | == == | | == | == == == '
top_middle= '| | | __| __| |__| |__ |__ | |__| |__|'
bottom_middle='| | | | | | | | | | | | |'
bottom= ' == | == == | == == | == |'
number_parts=[{},{},{},{},{},{},{},{},{},{}]
line_parts=[[],[],[],[]]
['top','top_middle','bottom_middle','bottom'].each_with_index do |one_line, i|
number_parts=[{},{},{},{},{},{},{},{},{},{}]
(0..9).each do |the_num|
number_parts[the_num] = {one_line.to_sym => eval(one_line)[the_num*5,5].to_s}
end
line_parts[i]= number_parts
end
all_nums=''
(0..3).each do |num|
all_nums+= (line_parts[num][0].values).to_s
#puts line_parts[num][0].values
end
puts all_nums
答案 0 :(得分:1)
我认为这将解决您的直接问题 - 即打印一个大的“0”。
all_nums = []
(0..3).each do |num|
all_nums.push(line_parts[num][0].values)
end
puts all_nums.join("\n")
更好的方法是使用map
:
all_nums = (0..3).map { |num| line_parts[num][0].values }
puts all_nums.join("\n")
另一个问题:您不需要使用eval
。实际上,几乎不需要使用eval
。
# Use variables rather than the strings 'top', 'top_middle', etc.
[top,top_middle,bottom_middle,bottom].each_with_index do |one_line, i|
...
# Then the eval() is unnecessary.
number_parts[the_num] = {one_line.to_sym => one_line[the_num*5,5]}
....
但你可以按照以下几行简化代码:
# Use an array, not a set of specifically named variables.
# This makes it a lot easier to iterate over the data.
rows = [
' -- | -- -- | | -- | -- -- -- ',
' | | | __| __| |__| |__ |__ | |__| |__|',
' | | | | | | | | | | | | |',
' -- | -- -- | -- -- | -- |',
]
# Create an array-of-arrays.
# num_parts[NUMBER] = [an array of four strings]
width = 5
num_parts = (0..9).map { |n| rows.map { |r| r[n * width, width] } }
# Inspect.
num_parts.each do |np|
puts
puts np.join("\n")
end
您可能还会看一下名为banner
的Unix命令,它会激发您使数字 EVEN BIGGER 。这将允许您开始添加曲线和其他设计触摸。