Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re: having trouble with simple math game

by tod222 (Pilgrim)
on Nov 26, 2010 at 03:16 UTC ( #873759=note: print w/replies, xml ) Need Help??


in reply to having trouble with simple math game

Always use strict and warnings:

use strict;
use warnings;

They are your friends:

> ./crop.pl Global symbol "$response1" requires explicit package name at ./crop.pl + line 41. Global symbol "$response1" requires explicit package name at ./crop.pl + line 48. Execution of ./crop.pl aborted due to compilation errors.

To get even that far I had to add some "my" statements:

#!/usr/bin/perl use strict; use warnings; print "Content-type: text/html\n\n"; use CGI qw(:standard); my $cornplanted=0; my $cornnotplanted=0; #@number1=("12" .. "25"); #$number1rand=$number1[rand @number1]; my $number1rand=int(rand(20)); my $number2=int(rand(12)); my $correctanswer=($number1rand + $number2); print "$correctanswer <br>"; my $output=<<_html_; <html> <body> <form method="post" action="foodaddition.cgi" name="form2"> Crops planted: $cornplanted <br> <input type="hidden" name="$cornplanted" id="$cornplanted" /> Crops not planted: $cornnotplanted <br> <input type="hidden" name="$cornnotplanted" id="$cornnotplanted" /> What does this math problem equal? <br> $number1rand + $number2 = <input type="text" name="response1" id="resp +onse1" /> <input type="hidden" name="response1" id="response1" /> <input type="submit" name="submit" value="Submit" /> </form> </body> </html> _html_ print $output; if ($response1 eq "$correctanswer") { $cornplanted=($cornplanted + 1); print "correct!"; } elsif ($response1 ne "$correctanswer") { $cornnotplanted=($cornnotplanted + 1); print "not correct!"; }

You'll do much better to read the section CREATING FILL-OUT FORMS in the CGI.pm documentation and generate your form fields following proper CGI.pm practice.

To debug your script, follow the recommendations in the DEBUGGING section of the CGI.pm docs.

Replies are listed 'Best First'.
Re^2: having trouble with simple math game
by Anonymous Monk on Nov 28, 2010 at 23:42 UTC

    Okay it's getting really close, i got the code to update the 'crops planted' and the 'crops not planted'... but for some reason even though i am creating fill-out forms in the CGI.pm documentation, it is still reading the answer for the math problem ($num1 + $num2) before i get a chance to put in the input...so basically i type in a number and until the addition equals that number there is no output, any advice? thanks, and here's the updated code

    #!/usr/bin/perl use CGI qw(:standard); $num1=int(rand(20)); $num2=int(rand(12)); print header; print start_html('A Simple Example'), h1('A Simple Example'), start_form, "What's your name? ",textfield('name'), p, "What is $num1 + $num2? ", textfield('addition'), p, "What's the combination?", p, checkbox_group(-name=>'words', -values=>['eenie','meenie','minie','moe'], -defaults=>['eenie','minie']), p, "What's your favorite color? ", popup_menu(-name=>'color', -values=>['red','green','blue','chartreuse']), p, submit, end_form, hr; $correctanswer=($num1 + $num2); $cropsplanted=0; $cropsnotplanted=0; if ((param() and param('addition') == "$correctanswer")) { $cropsplanted=($cropsplanted + 1); $cropsnotplanted=($cropsnotplanted + 0); print "Correct answer: $correctanswer", p, "Crops planted: $cropsplanted", p, "Crops not planted: $cropsnotplanted", p, "Your name is",em(param('name')), p, "Your answer to the math problem is ", em(param('addition')), p, "The keywords are: ",em(join(", ",param('words'))), p, "Your favorite color is ",em(param('color')), } if ((param() and param('addition') != "$correctanswer")) { $cropsplanted=($cropsplanted + 0); $cropsnotplanted=($cropsnotplanted + 1); print "Correct answer: $correctanswer", p, "Crops planted: $cropsplanted", p, "Crops not planted: $cropsnotplanted", p, "Your name is",em(param('name')), p, "Your answer to the math problem is ", em(param('addition')), p, "The keywords are: ",em(join(", ",param('words'))), p, "Your favorite color is ",em(param('color')), }

      I figured out what is wrong, but I am not exactly sure how to fix. So I changed the random numbers so that they are no longer random... $num1=20; and $num2=12; and with that it was able to read the input... the problem is with using a random number each time i press submit the random number changes, therefore the answer changes. I need to figure out to store the random values ($num1 and $num2) into another scalar variable (i.e. $a and $b) so that the random numbers don't change when I hit submit. I can't figure out how to do it though? any help would be nice. and just for an fyi, you can't put

      $num1 =$a; $num2=$b;

      because $a and $b will equal random numbers. And I also tried

      my $a=$num1; my $b=$num2;
      and that still didn't work, any help would be great, thanks

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://873759]
help
Chatterbox?
and one hand claps...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (14)
As of 2018-07-23 14:03 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    It has been suggested to rename Perl 6 in order to boost its marketing potential. Which name would you prefer?















    Results (469 votes). Check out past polls.

    Notices?