Perl 让倒计时计时器在特定时间停止并请求输入
我正在为班级做的一个项目希望我在60开始计数(打印每个数字),但计数器需要每隔10秒停止并请求用户输入。我让程序的这一部分以“密码”的形式工作。我遇到的问题是让我的子例程一起工作以得到我想要它做的事情。这是我到目前为止所拥有的Perl 让倒计时计时器在特定时间停止并请求输入,perl,loops,countdown,Perl,Loops,Countdown,我正在为班级做的一个项目希望我在60开始计数(打印每个数字),但计数器需要每隔10秒停止并请求用户输入。我让程序的这一部分以“密码”的形式工作。我遇到的问题是让我的子例程一起工作以得到我想要它做的事情。这是我到目前为止所拥有的 打印“输入密码”:; 我的$password=; chomp($password); if($password eq“password”){ &计数器; }否则{ 打印“坏”; } 副计数器{ 我们的美元倒计时=60; 而($countdown>0){ $倒计时--; &
打印“输入密码”:;
我的$password=;
chomp($password);
if($password eq“password”){
&计数器;
}否则{
打印“坏”;
}
副计数器{
我们的美元倒计时=60;
而($countdown>0){
$倒计时--;
&检查;
打印“$countdown\n”;
}
}
次级支票{
如果(我们的美元倒计时=(50,40,30,20,10)){
打印“输入密码:”;
我的$password=;
chomp($password);
}
如果($password eq“password”){
&计数器;
}否则{
打印“坏”;
}
}
PythonMaster的答案是可以的,只是它忽略了这是一个Perl问题
$|++; # unbuffered output
my $counter = 60;
my $passed;
while ($counter) {
$counter--;
print "$counter...\cm";
if ( not $counter % 10 ) {
last if $passed = check();
}
sleep 1;
}
print "\n";
print "All password attempts failed!\n" unless $passed;
sub check {
print "\nEnter password: ";
my $password = <STDIN>;
chomp($password);
return $password eq "password";
}
$|+++#无缓冲输出
我的$counter=60;
我的美元过去了;
while($counter){
$counter--;
打印“$counter…\cm”;
如果(不是$counter%10){
如果$passed=check(),则为last;
}
睡眠1;
}
打印“\n”;
打印“所有密码尝试均失败!\n”,除非$passed;
次级支票{
打印“\n输入密码:”;
我的$password=;
chomp($password);
返回$password eq“password”;
}
注:
如果标准输出为非零值,则取消缓冲。因为我们希望看到倒计时输出,所以我们需要取消缓冲STDOUT$|
- 关键点是使用模运算符来决定何时为10的倍数(如果为真,则模为零;因为在Perl中,零是一个“假”值,所以我们
而不是
以获得当模为零时为真的表达式
简化为只返回比较结果。如果为真,则函数返回真值,否则返回假值check()
执行三重任务:如果检查密码,则保存值,如果密码正确,则结束循环last if$passed=check()
- 额外的
字符用于将密码提示放到下一行,并确保最后一条“失败”消息出现在它自己的行上“\n”
使倒计时保持在同一行,直到出现密码提示“\cm”