2

有人可以帮我一个循环吗?我打算编写一个程序,它只是要求您猜测 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");
}
4

2 回答 2

2

使用直到循环

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)
于 2013-03-16T12:27:42.247 回答
2

更直接的方法是while循环

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 认为用户可以输入的所有内容(甚至是空行)都是正确的,所以这是永远的。这很好,因为有退出循环的条件。它elseif. 该last语句告诉 Perl 退出循环。如果else没有执行,它将回到while块的开头,用户必须重试。永远。

我所做的更改:-您不需要$i,因为您没有使用它-您使用了三个单独if的语句。()由于在这种情况下只有三个条件中的一个可以为真,我将它们合并为一个 - 不需要括号print

建议: - 您应该为变量命名它们的作用,而不是它们是什么。$int不是一个好名字。我会去$random,甚至$random_number。如果您稍后必须返回您的代码,那么详细程度很重要。- 有一个名为的功能say,您可以使用use feature 'say';. 它say "stuff"相当于print "stuff\n".


编辑:

如果您想添加与用户输入的号码没有直接关系的其他条件,您可以添加另一个if.

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;
  }
}

您还可以添加检查以确保用户输入了一个数字。如果输入了单词或字母,您当前的代码将产生警告。为此,您将需要一个正则表达式。在perlre中阅读它们。m//是与一起使用的匹配运算符=~\D匹配任何不是数字(0 到 9)的字符。next跨过块的其余部分while并开始检查while条件。

while (my $div = <STDIN>) {
  chomp $div;

  if ($div =~ m/\D/) {
    print "You may only guess numbers. Please try again.\n";
    next;
  }

  # ...
}

因此,完整的检查意味着“查看用户输入的内容,如果里面除了数字之外还有其他内容,请投诉并让他再试一次”。

于 2013-03-16T13:35:29.807 回答