为什么我们不能在 for 循环中使用"le"并且可以在 "if condition" 中使用



我作为初学者制作了这个程序。需要澄清一些事情!为什么我不能在下面给出的for循环中使用"le",但我可以在"if条件"中使用它。这背后的原因是什么?

?
print "Type the number upto series should runn";
my $var;
$var = int<STDIN>;
chomp $var;
my ($i, $t);
my $x = 0;
my $y = 1;
if($var eq 1) {
    print "nYour Series is : $xn";
} elsif($var eq 2){
    print "nYour Series is : $x $yn";
} elsif($var ge 2) {
    print "Your Series is : $x $y ";
    for($i = 1; $i le $var - 2; $i++) {
        # Why the condition not working when I'm using "le"
        # but it does work when I'm using "<="
        $t = $x + $y;
        $x = $y;
        $y = $t; 
        print "$t ";
    }
    print "n";
} else {
    print "Error: Enter a valid postive integern";
}

您可以随意使用le<=。但是你应该意识到它们是完全不同的操作符。

数值比较操作符

== !=  < <=  > >= <=>
等效的字符串比较操作符为

eq ne lt le gt ge cmp

字符串和数字根据需要相互转换。这意味着例如

 3 ge 20 # true:  3 is string-greater       than 20
11 le  2 # true: 11 is string-less-or-equal than  2

,因为字典顺序逐个字符比较。因此,当您希望将$variables的内容视为数字时,使用数字运算符是可取的,并且将产生正确的结果。

注意,Perl在字符串和数字之间进行不可见的转换。建议使用use warnings,以便在字符串不能表示数字(例如"a")时得到有用的消息。

正确答案已经给出,ge进行字符串比较,例如11被认为小于2。解决方案是使用数值比较,==>=

我想我可以帮助说明你所遇到的问题。下面是默认sort如何工作的演示:

$ perl -le 'print for sort 1 .. 10'
1
10
2
3
4
5
6
7
8
9

可以看到,它认为10低于2,这是因为字符串比较,这是sort的默认模式。下面是默认排序例程的内部结构:

sort { $a cmp $b }

cmpeqlege一样,属于字符串比较操作符。这些操作符在这里描述(cmp在它下面)。

要使排序例程达到我们在上面示例中期望的效果,我们必须使用一个数值比较运算符,即"宇宙飞船运算符"<=>:

sort { $a <=> $b }

在您的情况下,您可以使用下面的一行代码来解决问题:

$ perl -nlwe 'print $_ ge 2 ? "Greater or equal" : "Lesser"'
1
Lesser
2
Greater or equal
3
Greater or equal
11
Lesser

当你用eq, le, gt.....比较数字时等;它们首先被转换为字符串。字符串将根据字母顺序进行检查,因此这里的"11"将小于"2"。

所以你应该使用==,<=,>=…

我认为您可能希望看到一个更像perl的程序,它可以生成像您的那样的Fibonnaci系列。

use strict;
use warnings;
print "Type the length of the seriesn";
chomp(my $length = <>);
unless ($length and $length !~ /D/ and $length > 0) {
  print "Error: Enter a positive integern";
}
print "n";
my @series = (0, 1);
while (@series < $length) {
  push @series, $series[-2] + $series[-1];
}
print "@series[0..$length-1]n";

相关内容

  • 没有找到相关文章

最新更新