2014-10-20 2 views
1

У меня есть задание в Perl, и мне нужна небольшая помощь здесь. Я пытался это решить какое-то время, но я не мог, так может кто-нибудь мне помочь?Можете ли вы мне помочь с назначением 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

Ваш вопрос должен объяснить, что не так с кодом – FuzzyTree

+3

Сколько стоит 'int (rand 'Cat') + 'Lion''? – choroba

+1

@choroba Это большой кот? –

ответ

1

Вот подсказка.

my $num = int rand 3; 

даст вам 0, 1 или 2, (псевдо) случайным образом.

Если ваши значения были сохранены в массиве, вы можете выбрать один из них: $array[$pick]. Но ваше назначение - использовать скалярные переменные, а не массив. Вы можете понять, как использовать скаляры в качестве списка?

+0

К сожалению, я не могу. Я пробовал полчаса! – user3586095

+1

«Но ваше назначение - использовать скалярные переменные, а не массив». Ничто в вопросе говорит, что скаляры не могут быть помещены в массив. – ThisSuitIsBlackNot

+1

@ThisSuitIsBlackNot Немного предположения с моей стороны. В подсказке сказано создать три _дифференциальных переменных, и, предположительно, массивы еще не преподавались (таким образом, создание трех отдельных переменных только для того, чтобы набить их в массив, будет противоречить духу проблемы, если не букве). – Slade

0

Вам необходимо самостоятельно выполнить задание. Однако проблема заключается в том, что вы используете rand.

У вас есть:

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

$a1 и $a3 не цифровой, а также строки. Посмотрите на то, как работает rand (см. Ссылку выше). Напишите несколько программ, чтобы поиграть с ним и посмотреть, сможете ли вы это понять.

Slade дал вам представление о том, как генерировать целочисленные значения от 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; поймает это.

+0

Вы правы. Это от 0 до 2 включительно, так как он имеет 'int' спереди. Я исправлю свой пост. –

+0

У Slade есть 'int rand 3', который даст вам 0, 1 или 2. –