Perl 循环增量值增加超过其限制的三部分
我正在用Perl编写一些代码来测试数字,并确定它们的所有数字是完全偶数还是完全奇数。我用$ARGV[0]=3和$ARGV[1]=1运行程序。我遇到了一些问题,添加了一行代码,以便在每次外部循环运行时检查$n的值。$n的值分别为1、2和2。我想知道为什么n美元超过1美元 这是我的密码:Perl 循环增量值增加超过其限制的三部分,perl,for-loop,increment,nested-loops,Perl,For Loop,Increment,Nested Loops,我正在用Perl编写一些代码来测试数字,并确定它们的所有数字是完全偶数还是完全奇数。我用$ARGV[0]=3和$ARGV[1]=1运行程序。我遇到了一些问题,添加了一行代码,以便在每次外部循环运行时检查$n的值。$n的值分别为1、2和2。我想知道为什么n美元超过1美元 这是我的密码: #!/usr/bin/perl use warnings; my $even = 0; my $odd = 0; my $limit = $ARGV[0]; #highest number considered
#!/usr/bin/perl
use warnings;
my $even = 0;
my $odd = 0;
my $limit = $ARGV[0]; #highest number considered
my $places = $ARGV[1]; #number of places in said number
for($x = 1; $x <= $limit; $x++){
my @z;
my $tot = 0;
my $c = $x;
for($n = 1; $n <= $places; $n++){
$z[$n] = $c % 2;
$tot = $tot + $z[$n];
$c = $c - $z[$n];
if($c == 0){
last;
}
$c = $c / 10;
}
print $n;
if ($tot == 0) {
$even++;
}elsif($tot == 1) {
$odd++;
}
}
print $even . "\n";
print $odd;
我以前没有用Perl编写代码,如果有点不雅观的话,很抱歉。您正在循环后打印$n的值。循环$n的第一次迭代设置为1,在循环$n递增$n++之后,然后是$n1,因此for循环终止,因此打印2。您正在循环后打印$n的值。循环$n的第一次迭代被设置为1,在循环$n被递增$n++之后,然后是$n1,因此for循环终止,因此2被打印。我正在用Perl编写一些代码来测试数字,并确定它们的所有数字是完全偶数还是完全奇数 以下内容无法回答您的问题,但可能会有所帮助:
use strict;
use warnings;
my $n = 2468;
my $c;
$c += $_ % 2 for split '', $n;
if ( !$c) {
print "$n has all even digits.\n";
}
elsif ( $c == length $n ) {
print "$n has all odd digits.\n";
}
else {
print "$n has a mixture of even and odd digits.\n";
}
拆分将数字拆分为数字,并对每个数字执行$c+=$\u2。偶数mod 2返回0,因此如果$c为零,则该数字只有偶数位数。Odd mod 2返回1,所以如果$c与字符串$n的长度相同,则数字只有奇数。否则,数字由偶数和奇数混合而成。我正在用Perl编写一些代码来测试数字,并确定它们的所有数字是完全偶数还是完全奇数
以下内容无法回答您的问题,但可能会有所帮助:
use strict;
use warnings;
my $n = 2468;
my $c;
$c += $_ % 2 for split '', $n;
if ( !$c) {
print "$n has all even digits.\n";
}
elsif ( $c == length $n ) {
print "$n has all odd digits.\n";
}
else {
print "$n has a mixture of even and odd digits.\n";
}
拆分将数字拆分为数字,并对每个数字执行$c+=$\u2。偶数mod 2返回0,因此如果$c为零,则该数字只有偶数位数。Odd mod 2返回1,所以如果$c与字符串$n的长度相同,则数字只有奇数。否则,该数字由偶数和奇数混合而成。当我按照Kevin的建议更改代码时,会收到错误消息$places is undefined$0保存正在运行的程序的字符串。最初您的代码是正确的,应该使用$ARGV[0]和$ARGV[1]谢谢,但是$nw的值仍然存在问题。当我按照Kevin的建议更改代码时,我收到错误消息$places is undefined$0保留正在运行的程序的字符串。您一开始是正确的,应该使用$ARGV[0]和$ARGV[1]谢谢,但是$nIt的值仍然存在问题。看起来逻辑仍然需要一些工作,如果需要,我可以帮助您。我的另一个评论是,强烈建议在程序开始时使用警告和严格使用。没有这些,很容易犯一些Perl很乐意忽略的简单逻辑错误。@i5a1ah下次使用formy$n=0$n@terdon-或者我的$n 0$地点{……代替C风格循环。Ya,C++是我的第一语言,所以我倾向于使用它的样式……我知道一些东西,看起来逻辑仍然需要一些工作,如果需要的话,我可以帮助你。另外一个我的评论是,强烈建议在你的程序开始时使用警告和使用严格。没有这些,很容易犯一些简单的逻辑错误,Perl会很乐意忽略。@ I5A1AH下一次使用FYY $N=0;$N@ Terdo-或者也许是我的$N 0个……{…代替C型循环。Ya,C++是我的第一语言,所以我倾向于使用它的样式……我想知道一些东西。