我必须创建一个数字猜谜游戏程序并编写代码,但在输入我的第一个数字猜测后,输出变成无限循环并不断重复,所以我被迫关闭我的程序。我的“{}”似乎是一个错误,但我无法弄清楚错误在哪里。我必须让用户猜测8次不同的时间,并且我坚持第一次猜测结果,因为它不断重复。这是我的代码:
print "Welcome to the Perl Whole Number Guessing Game!\n Please enter a number between 1 and 100 and I will tell you if the number you're trying to guess is higher or lower than your guess. You have up to 8 chances to guess the number.\n";
my ($guess, $target, $counter); #my variables
$target = (int rand 100) +1; #must be between 1-100
$counter =1;
#1st guess:
print "Enter guess #$counter:";
chomp ($guess = <>);
while ($guess != $target)
{ if ($guess < $target)
{
print "Your guess, $guess, is too low. Try again.\n ";
}
else
{ print "Your guess, $guess, is too high. Try again.\n ";
}}
until ($guess ==$target)
{
print "Congratulations! You guessed the secret number ($target) in $counter tries!\n";
}
$counter ++;
...然后,确切的代码重复8次,直到最后一位说明:
#8th and final guess:
print "Enter guess #$counter:";
chomp ($guess = <>);
while ($guess != $target)
{ if ($guess < $target)
{print "I'm sorry, you didn't guess the secret number, which was $target.\n";
}
else
{print "I'm sorry, you didn't guess the secret number, which was $target.\n";
}}
until ($guess ==$target)
{ print "Congratulations! You guessed the secret number ($target) in $counter tries!\n";
}
我只是想让代码让我再次猜测所有8次,而不是让第一次猜测无限循环。
注意:我刚开始使用Perl编程类,并且不能使用任何花哨,困难的代码,基本上最简单的解决方案是最好的,也是我唯一能理解的东西。
感谢您的帮助!
答案 0 :(得分:2)
重复代码是你基本上不应该做的事情,除非在非常简单的情况下。由于您有特定的计数,因此只需使用带计数器的for
循环。
您还应始终使用use warnings; use strict;
,因为它可以帮助您避免简单的错误并为您提供信息性错误。
此外,您的if语句将无法检测到正确的猜测。您需要使用elsif
(是,否“e”)来检查数字是否过高。
my $guesses = 8;
for my $counter (1 .. $guesses) {
print "Enter guess #$counter:";
chomp (my $guess = <>);
if ($guess < $target) {
print "Your guess, $guess, is too low. Try again.\n ";
} elsif ($guess > $target) {
print "Your guess, $guess, is too high. Try again.\n ";
} else {
print "Congratulations! You guessed the secret number ($target) in $counter tries!\n";
}
}
答案 1 :(得分:0)
首先,您需要将增量放在最佳状态。
重复代码是制作程序的一种可怕方式。那是什么循环。 你只需要在第8次尝试后突破循环。
PERL不是我的选择,但在大多数语言中,这样的语法都有效:
while (($guess != $target) && ($count <= 8))
{...}
答案 2 :(得分:0)
while ($guess != $target)
意味着用户的猜测不是计算机“想到”的随机数... 做括号内的内容......
是:打印消息(猜测是“低”,“高”还是正确)
现在,想一想......让我们说我们玩这个游戏......而且我是那个必须猜测你的数字......让我们模拟它...
所以,你明白我的观点:其余的代码永远不会被执行。因为你只是一直告诉我,我错了,不要再猜测......
所以,你为什么不做那些与邪恶有关的事情...... WHILE ?
答案 3 :(得分:0)
我不知道perl,但从逻辑上讲,你可以将整个事情放在一个循环中
while(guess!= target&amp;&amp; wrongAnswer&lt; 8) {
}
如果答案不等于目标,则增加wrongAnswer计数器。
答案 4 :(得分:0)
正如其他海报所指出的那样,你需要在while循环内的某处增加。另外,请记住,您不需要以下代码块:
until ($guess ==$target) {
print "Congratulations! You guessed the secret number ($target) in $counter tries!\n";
}
如果你在代码中达到这一点,那么$ guess等于$ target的条件已经满足了。因此,再次检查是多余的。您可以跳过until块并在while循环后直接转到print语句。
最重要的问题是,你只需要在while块开始之前输入一次。因此,在while块期间,用户永远不会有机会再次猜测。猜测永远不会改变,循环将永远持续下去。为避免代码重复,您可以将猜测代码放入子例程中:
sub guess {
print "Enter guess #$counter:";
chomp( $guess = <> );
}
然后在进入while循环之前调用此子例程:
guess();
然后在你的while块结束前一次:
guess();
这会在while循环的下一次传递之前重新设置$ guess变量,这将使你摆脱无限循环。我本来会给你一个完整的代码示例,但由于这被标记为“家庭作业”,这会让你失去自己解决这些问题的好处。 :)