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 warnings
和 use 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";
您的程序几乎正确,只是有几个问题:
- 请习惯于始终将
use strict;
和 use warnings;
添加到您的脚本中。 它们会
(除其他外)强制你声明你使用的所有变量(my $num=…;
)
并警告您常见错误(如拼写错误)。有些人认为这是一个错误
use strict;
和 use warnings;
默认情况下未打开。
- 当从 STDIN(或其他文件句柄)读取一行时,读取的行将包含
尾随换行符“\n”。为了与工作进行比较,您必须摆脱使用
chomp
函数。
- Perl 中有两组不同的比较运算符:一组用于字符串,一组用于数字。
数字与
<
、>
、<=
、>=
、==
和 !=
进行比较。对于字符串,您必须使用
lt
(小于)、gt
、le
(小于或等于)、ge
、eq
和 ne
。如果您使用其中一个号码
字符串运算符 Perl 将尝试将您的字符串解释为数字,因此 $decision == "Y"
将检查 $decision
是否为 0
。如果你有 use warnings;
Perl 会注意到你。
请改用 $decision eq "Y"
。
- 外
while
循环在比较之后有一个尾随 ;
,这会给你一个无穷无尽的
循环或空操作(取决于 $decision
的内容)。
- 您在
$num = $num - 1;
中忘记了 =
。
- 您忘记了
print "$fact\n";
周围的引号 "
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
(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 warnings
和 use 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";
您的程序几乎正确,只是有几个问题:
- 请习惯于始终将
use strict;
和use warnings;
添加到您的脚本中。 它们会 (除其他外)强制你声明你使用的所有变量(my $num=…;
) 并警告您常见错误(如拼写错误)。有些人认为这是一个错误use strict;
和use warnings;
默认情况下未打开。 - 当从 STDIN(或其他文件句柄)读取一行时,读取的行将包含
尾随换行符“\n”。为了与工作进行比较,您必须摆脱使用
chomp
函数。 - Perl 中有两组不同的比较运算符:一组用于字符串,一组用于数字。
数字与
<
、>
、<=
、>=
、==
和!=
进行比较。对于字符串,您必须使用lt
(小于)、gt
、le
(小于或等于)、ge
、eq
和ne
。如果您使用其中一个号码 字符串运算符 Perl 将尝试将您的字符串解释为数字,因此$decision == "Y"
将检查$decision
是否为0
。如果你有use warnings;
Perl 会注意到你。 请改用$decision eq "Y"
。 - 外
while
循环在比较之后有一个尾随;
,这会给你一个无穷无尽的 循环或空操作(取决于$decision
的内容)。 - 您在
$num = $num - 1;
中忘记了=
。 - 您忘记了
print "$fact\n";
周围的引号 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