请有人帮我一个循环。我打算写一个程序,只是要求你猜一个1到10之间的数字。如果这不是正确的答案你会得到另一个机会,等等。
我可以让我的脚本打印正确/不正确一次,但是如何在此脚本中添加用户再次尝试的可能性(直到他们猜出正确的数字)?
这是我的基本脚本,我确信它非常简单,可能充满了错误。有人可以帮我解决这个简单的问题吗?
抱歉布局不好,但我不明白如何将我的脚本放在这个网站上,对不起!
use strict;
use warnings;
print "Hello, I've thought of a number, do you know what number it is?\n";
sleep (1);
print "Try and guess, type in a number between 1 and 10!\n";
my $div = <STDIN>;
my $i = 0;
my $int = int(rand (10)) + 1;
chomp $div;
if ($div < $int) {
print ("The number I though of is higher than $div, try again?\n");
}
if ($div > $int) {
print ("The number I though of is lower that $div, try again?\n");
}
if ($div == $int) {
print ("Amazing, you've guessed mt number\n");
}
答案 0 :(得分:2)
使用until循环
my $guessed = 0;
do {
print "Try and guess, type in a number between 1 and 10!\n";
my $div = <STDIN>;
...;
if ($div == $int) {
print ("Amazing, you've guessed mt number\n");
$guessed = 1;
}
} until ($guessed)
答案 1 :(得分:2)
更直接的方法是while
loop。
use strict;
use warnings;
print "Hello, I've thought of a number, do you know what number it is?\n";
sleep (1);
my $int = int(rand (10)) + 1;
print "Try and guess, type in a number between 1 and 10!\n";
while (my $div = <STDIN>) {
chomp $div;
if ($div < $int) {
print "The number I though of is higher than $div, try again?\n";
}
elsif ($div > $int) {
print "The number I though of is lower that $div, try again?\n";
}
else {
print "Amazing, you've guessed mt number\n";
last;
}
}
虽然(双关语)你的代码已经非常好了(你正在使用strict
和warnings
并且没有语法错误,不管怎么说!)我改变了一些东西,还有一些更多我建议改进的地方。
但首先,让我们来看看循环。只要条件为真,程序将保持在while
循环中。由于Perl认为用户可以输入的所有内容(甚至空行)都是真的,因此这是永远的。这很好,因为有条件退出循环。它位于else
的{{1}}部分。 if
语句告诉Perl退出循环。如果last
未执行,它将返回else
块的开头,用户必须再次尝试。永远。
我所做的改变:
- 您不需要while
,因为您没有使用它
- 您使用了三个单独的$i
语句。由于在这种情况下只有三个条件中的一个可以为真,我将它们合并为一个
- 不需要使用if
()
parens
建议:
- 您应该为变量命名,而不是它们的名称。 print
不是一个好名字。我会选择$int
,甚至是$random
。如果您必须稍后返回代码,则详细程度非常重要。
- 您可以使用$random_number
启用function called say
。它会将use feature 'say';
与say "stuff"
相等。
修改强>
如果您想添加与用户输入的数字无直接关系的其他条件,您可以添加另一个print "stuff\n"
。
if
您还可以添加检查以确保用户输入了数字。如果输入了单词或字母,您当前的代码将产生警告。为此,您需要一个正则表达式。在perlre中阅读它们。 while (my $div = <STDIN>) {
chomp $div;
if ($div eq 'quit') {
print "You're a sissy... the number was $int. Goodbye.\n";
last;
}
if ($div < $int) {
print "The number I though of is higher than $div, try again?\n";
}
elsif ($div > $int) {
print "The number I though of is lower that $div, try again?\n";
}
else {
print "Amazing, you've guessed mt number\n";
last;
}
}
是与m//
一起使用的match operator。 =~
匹配任何不是数字的字符(0到9)。 next
跨越\D
块的其余部分,然后检查while
条件。
while
因此,完整的检查意味着“查看用户输入的内容,如果其中没有任何内容,请投诉并让他再试一次”。