我在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";
}
我不知道我的代码有什么问题,所以如果你知道如何解决这个问题,我会非常感激。
答案 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
误认为是$naem
。 use strict;
会抓住这个。