试着写一个简单的循环

时间:2013-03-16 12:19:56

标签: perl

请有人帮我一个循环。我打算写一个程序,只是要求你猜一个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");
}

2 个答案:

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

虽然(双关语)你的代码已经非常好了(你正在使用strictwarnings并且没有语法错误,不管怎么说!)我改变了一些东西,还有一些更多我建议改进的地方。

但首先,让我们来看看循环。只要条件为真,程序将保持在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

因此,完整的检查意味着“查看用户输入的内容,如果其中没有任何内容,请投诉并让他再试一次”。