perl - 尝试使用 while 循环询问用户是否要再次这样做

perl - Trying to use a while loop to ask the user if they want to do that again

(perl 新手) 我有一个计算阶乘的小 perl 程序。我想使用 while 循环,以便在用户获得结果后,他们将被询问 "Calculate another factorial? Y/N" 并再次让 Y 运行 代码并让 N 结束程序。

这是我的代码:

print"Welcome! Would you like to calculate a factorial? Y/N\n";

$decision = <STDIN>;

while $decision == "Y";
{
    print"Enter a positive # more than 0: \n";

    $num = <STDIN>;
    $fact = 1;

    while($num>1)
    {
        $fact = $fact * $num;
        $num $num - 1;
    }

    print $fact\n;
    print"Calculate another factorial? Y/N\n";
    $decision = <STDIN>;
}
system("pause");

困扰我的是将 while 循环放在哪里以及如何使 Y/N 选项起作用。我也不清楚 system("pause")sleep 函数。我确实知道 system("pause") 让我的程序正常工作。

始终将 use warningsuse strict 添加到程序的开头。 您的代码中有许多拼写错误会被此捕获。

#!/usr/bin/perl
use warnings;
use strict;


print "Welcome! Would you like to calculate a factorial? Enter 'Y' or 'N': ";

my $answer = <STDIN>;
chomp($answer);

while($answer =~ /^[Yy]$/){
    my $fact = 1;
    print"Enter a positive number greater than 0: ";

    my $num = <STDIN>;
    chomp($num);
    my $number_for_printing = $num;

    while($num > 0){
        $fact = $fact * $num;
        $num--;
    }
    print "The factorial of $number_for_printing is: $fact\n";

    print"Calculate another factorial? Enter 'Y' or 'N': ";
    $answer = <STDIN>;
    chomp($answer);
}

print "Goodbye!\n";

您的程序几乎正确,只是有几个问题:

  1. 请习惯于始终将 use strict;use warnings; 添加到您的脚本中。 它们会 (除其他外)强制你声明你使用的所有变量(my $num=…;) 并警告您常见错误(如拼写错误)。有些人认为这是一个错误 use strict;use warnings; 默认情况下未打开。
  2. 当从 STDIN(或其他文件句柄)读取一行时,读取的行将包含 尾随换行符“\n”。为了与工作进行比较,您必须摆脱使用 chomp 函数。
  3. Perl 中有两组不同的比较运算符:一组用于字符串,一组用于数字。 数字与 <><=>===!= 进行比较。对于字符串,您必须使用 lt(小于)、gtle(小于或等于)、geeqne。如果您使用其中一个号码 字符串运算符 Perl 将尝试将您的字符串解释为数字,因此 $decision == "Y" 将检查 $decision 是否为 0。如果你有 use warnings; Perl 会注意到你。 请改用 $decision eq "Y"
  4. while 循环在比较之后有一个尾随 ;,这会给你一个无穷无尽的 循环或空操作(取决于 $decision 的内容)。
  5. 您在 $num = $num - 1; 中忘记了 =
  6. 您忘记了 print "$fact\n";
  7. 周围的引号 "
  8. system("pause") 仅适用于 Windows,其中 pause 是外部命令。在 Linux(其中 我刚刚测试过)没有这样的命令,system("pause") 失败并返回 command not found。 我将其替换为 sleep(5);,只需等待 5 秒。

.

#!/usr/bin/env perl

use strict;
use warnings;

print "Welcome! Would you like to calculate a factorial? Y/N\n";

my $decision = <STDIN>;
chomp($decision);    # remove trailing "\n" from $decision

while ( $decision eq 'Y' ) {
    print "Enter a positive # more than 0: \n";

    my $num = <STDIN>;
    chomp($num);
    my $fact = 1;

    while ( $num > 1 ) {
        $fact = $fact * $num;
        $num  = $num - 1;
    }

    print "$fact\n";
    print "Calculate another factorial? Y/N\n";
    $decision = <STDIN>;
    chomp($decision);
}
print "ok.\n";

sleep(5);    # wait 5 seconds