我创建了一个Perl程序来计算数字 3 到 10 的可分数量。
示例:数字6有 4个除数 1,2,3和6.
这就是程序的工作方式:
程序将计算 3 的除数,然后将其打印到 report.txt 文件中。接下来,它将继续计算 4 的除数,并将其打印到 report.txt 。程序将执行此操作,直到计算出数字 10 ,然后它将关闭程序。
#!/usr/bin/perl
use warnings;
use strict;
my $num = 2; # The number that will be calculated
my $count = 1; # Counts the number of divisors
my $divisors; # The number of divisors
my $filename = 'report.txt';
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!"; # open file "report.txt"
for (my $i=2; $i <= 10; $i++) {
while( $num % $i == 0) { # Checks if the number has a remainder.
$num++; # Adds 1 to $num so it will calculate the next number.
$count++; # counts the number of divisible numbers.
$num /= $i; # $num = $num / $i.
}
$divisors = $count; # The number of divisors are equal to $count.
print $fh "$divisors\n"; # The output will be repeated..
}
close $fh # Closes the file "report.txt"
我认为问题在于for循环不断重复此代码:
print $fh "$divisors\n";
输出结果为:
2
2
2
2
2
2
2
2
2
但是,我不确定我到底错过了什么。
答案 0 :(得分:1)
为变量提供有意义的名称。这有助于使代码自我记录,同时也有助于您识别何时错误地使用变量。变量名$i
不会传达任何内容,但$divisor
表示您正在测试该数字是否为除数。
至于为什么你的代码是循环的,不能说。这是一个重新格式化的代码版本,它可以运行:
#!/usr/bin/perl
use warnings;
use strict;
use autodie;
for my $num (2..10) {
my $divisor_count = 0;
for my $divisor (1..$num) {
$divisor_count++ if $num % $divisor == 0;
}
print "$num - $divisor_count\n"
}
输出:
2 - 2
3 - 2
4 - 3
5 - 2
6 - 4
7 - 2
8 - 4
9 - 3
10 - 4