如何创建数字标尺和均匀间隔的数字宽度标记
How to create a numeric ruler and evenly spaced numeric width markers
我是 Perl 新手。一个练习,我要创建一个数字标尺,从中我将数据列的大小设置为 20 个字符宽度,这个练习被证明有点难以完成。到目前为止,我有,
printf “%10d” x 5, (1..6);
@ruler = (1..10) x 7;
Print @ruler, “\n”;
它应该看起来像,
1 2 3 4
1234567890123456789012345678901234567890
我得到的第一行数字是一个错误,‘ 行 # 处的 printf 中的冗余参数;底行产生从 1 到 10 的数字,就像范围运算符应该的那样,但我希望它产生 1 到 9,最后是零。我确实想过从0开始范围,但我还没有想出如何删除第一个索引并且只删除第一个索引。
非常感谢您对这两个问题的指导。
警告是因为您将 6 个数字传递给 printf
,但格式只需要 5 个。
对我来说,
1 2 3 4
1234567890123456789012345678901234567890
读作
11, 12, 13, ..., 19, 10, 21, 22, 23, ...
为什么以11开头?为什么 10 在 19 和 21 之间?
以下更有意义:
1 2 3 4
01234567890123456789012345678901234567890 0-based
和
1 2 3 4
1234567890123456789012345678901234567890 1-based
我不会直接给出解决方案。
- 如果你想要数字 1 到 9 和 0,那就是
1..9, 0
。
%10d
将在左侧添加填充。 %-10d
将在右侧添加填充。
- 没有人说你不能用不重复的东西作为输出的前缀,比如零或 space。
提供所需的输出从11
而不是1
开始计数——它看起来不正确.
也许 OP 打算从 1
开始计数,直到某个 $max
值,并在主计数器上方放置一个代表 tens 的数字。
请研究以下代码示例以符合您的要求。
use strict;
use warnings;
use feature 'say';
my $max = shift || 45;
rule($max);
sub rule {
my $max = shift;
my($a,$b);
$a .= ' ' x 9 . $_ for 1..$max/10;
$b .= $_ % 10 for 1..$max;
say $a . "\n" . $b;
}
输出
1 2 3 4
123456789012345678901234567890123456789012345
原始 OP 的代码需要稍作修改才能获得所需的输出
use strict;
use warnings;
use feature 'say';
my $max = shift || 45;
printf "%10d" x int($max/10) . "\n", (1..$max/10);
print $_ % 10 for 1..$max;
print "\n";
我是 Perl 新手。一个练习,我要创建一个数字标尺,从中我将数据列的大小设置为 20 个字符宽度,这个练习被证明有点难以完成。到目前为止,我有,
printf “%10d” x 5, (1..6);
@ruler = (1..10) x 7;
Print @ruler, “\n”;
它应该看起来像,
1 2 3 4
1234567890123456789012345678901234567890
我得到的第一行数字是一个错误,‘
非常感谢您对这两个问题的指导。
警告是因为您将 6 个数字传递给 printf
,但格式只需要 5 个。
对我来说,
1 2 3 4
1234567890123456789012345678901234567890
读作
11, 12, 13, ..., 19, 10, 21, 22, 23, ...
为什么以11开头?为什么 10 在 19 和 21 之间?
以下更有意义:
1 2 3 4
01234567890123456789012345678901234567890 0-based
和
1 2 3 4
1234567890123456789012345678901234567890 1-based
我不会直接给出解决方案。
- 如果你想要数字 1 到 9 和 0,那就是
1..9, 0
。 %10d
将在左侧添加填充。%-10d
将在右侧添加填充。- 没有人说你不能用不重复的东西作为输出的前缀,比如零或 space。
提供所需的输出从11
而不是1
开始计数——它看起来不正确.
也许 OP 打算从 1
开始计数,直到某个 $max
值,并在主计数器上方放置一个代表 tens 的数字。
请研究以下代码示例以符合您的要求。
use strict;
use warnings;
use feature 'say';
my $max = shift || 45;
rule($max);
sub rule {
my $max = shift;
my($a,$b);
$a .= ' ' x 9 . $_ for 1..$max/10;
$b .= $_ % 10 for 1..$max;
say $a . "\n" . $b;
}
输出
1 2 3 4
123456789012345678901234567890123456789012345
原始 OP 的代码需要稍作修改才能获得所需的输出
use strict;
use warnings;
use feature 'say';
my $max = shift || 45;
printf "%10d" x int($max/10) . "\n", (1..$max/10);
print $_ % 10 for 1..$max;
print "\n";