你能帮我解决Perl的任务吗?

时间:2014-10-20 16:53:13

标签: perl variable-assignment

我在Perl有一个任务,我需要一点帮助。我一直试图解决它一段时间,但我不能,所以有人可以帮助我吗?

以下是问题:

  

编写一个程序,创建三个不同的变量,所有变量都分配给它们的动物名称(每个变量一个动物)。显示用户的三只动物。让随机数发生器选择三只动物中的一只,并要求用户猜测选择了哪种动物。让用户知道他们是否猜对了。

我不知道的那部分是“让一个随机数发生器选择三只动物中的一只”。

到目前为止,这是我的代码:

#!/user/bin/perl
#Assignment1.pl

use warnings;

$a1 = "Cat";
$a2 = "Dog";
$a3 = "Lion";

print "You have three animals: $a1 , $a2 , $a3";

$num = 1 + int( rand(3) );    # I'm not sure of this

print "\nChoose which animal has been chosen?\n";
print "Answer: ";
$ans = <STDIN>;
chomp $ans;

if ( $ans eq $num ) {
    print "\nYour guess is correct!\n";
} else {
    print "Your guess is incorrect\n";
}

我不知道我的代码有什么问题,所以如果你知道如何解决这个问题,我会非常感激。

2 个答案:

答案 0 :(得分:1)

这是一个提示。

my $num = int rand 3;

会随机给你0,1或2,(伪)。

如果您的值存储在数组中,则可以选择$array[$pick]。但是你的任务是使用标量变量,而不是数组。你能弄清楚如何使用标量作为列表吗?

答案 1 :(得分:0)

您需要自己完成作业。但问题是您使用rand

你有:

$num = int(rand($a1)) + $a3;

$a1$a3不是数字,而是字符串。看看rand的工作方式(参见上面的链接)。写一些程序来玩它,看看你是否能理解它。

Slade让您了解如何生成0到2之间的整数值(包括0和2)。获得该值后,可以使用if/elsif/else语句确定要打印的语句:

if ( $num == 0 ) {
    print "The animal is...";
}
elsif ( $num == 1 ) {

注意比较中的双==!这是数字比较。如果您使用常规=,则if会将$num设置为零,而不会将$num与零进行比较。

有趣的是,$num将是假的,因为它的值为零。这会导致您的程序尝试将elsif设置为$num的{​​{1}}语句,这将是真的。

使用use warnings;,您的程序会打印出在条件中找到=的警告。

阵列会让整个程序变得更容易。你能使用数组变量吗?

始终use strict;以及use warnings;use strict;要求您使用my声明变量(就像我上面所做的那样)。这可以防止这样的错误:

$name = "Bob";
print "Hello, $naem!\n";

我错误地将$name中的print误认为是$naemuse strict;会抓住这个。