# Using FormPage to practice simple math with my kindergartener

GROUPS:
 Chad Knutson 4 Votes Winter break is nearly over for my daughter, so today I had some fun creating some simple applications to refresh her memory. I am making use of the FormPage function in my code.In the first example, I deploy a FormPage that generates simple random sums. Note that the first time the Form is loaded, a question is not available, so I have a form element saying that my daughter should type in any number. Questions then follow. My form is public, so feel free to try it, or deploy your own. In[4]:= CloudDeploy[ FormPage[FormObject[{"ans", "Sum"} -> "Number", AppearanceRules -> <|"Description" -> "To begin, type any number. Then answer the question below."|>], Module[{res}, If[FileExistsQ[CloudObject["numPair"]], CloudGet[CloudObject["numPair"]]; res = If[#ans === Total@ns, Style["Correct", 40, Blue], Style["Wrong: " <> StringJoin[Riffle[ToString /@ ns, "+"]] <>" = " <> ToString[Total@ns], 40, Red]]; ns = RandomInteger[{1, 9}, 2]; CloudSave[ns, CloudObject["numPair"]]; Rasterize@TableForm@{res, "Next:", Style[StringJoin[Riffle[ToString /@ ns, "+"]], 40, Purple]}, ns = RandomInteger[{1, 9}, 2]; CloudSave[ns, CloudObject["numPair"]]; While[#ans === Total@ns, ns = RandomInteger[{1, 9}, 2]]; Style[StringJoin[Riffle[ToString /@ ns, "+"]], 40, GrayLevel[0.2]]]] &] , Permissions -> "Public"] Out[4]= CloudObject["https://www.wolframcloud.com/objects/63de439d-c861-44e6-a90d-69b5bd2d2556"] The second example tests recognition of spoken numbers. Since Speak isn't yet implemented in the WolframCloud, I can only use a Mathematica notebook here. As with the previous example, I'm using FormPage which cannot load in an initial question. FormPage[FormObject[{"ans", "Number"} -> "Number", AppearanceRules -> <|"Description" -> "To begin, type any number"|>], Module[{res}, If[NumberQ[num], res = If[#ans === num, Speak["Correct"]; Style["Correct", 40, Blue], Speak["Wrong"]; Style["Wrong: the number was " <> ToString@num, 40, Red]]; While[#ans === num, num = RandomInteger[{1, 100}]]; Pause[3]; Speak["Ready, " <> ToString@num]; Pause[1]; Speak[num]; TableForm[{res, Style["\n Next:\n"], Style["What is this number?", 40, GrayLevel[0.2]]}], num = RandomInteger[{1, 100}]; While[#ans === num, num = RandomInteger[{1, 100}]]; Speak["Ready, " <> ToString@num]; Pause[1]; Speak[num]; Style["What number did I say?", 40, GrayLevel[0.2]]]] &] Note that there is other weirdness I had to deal with. In a Mathematica notebook, the Form won't re-evaluate when the same input is submitted. So I ensure that the next question has a different answer than the just submitted value.This was a rather easy and fun way to occupy my daughter for a short time today. I think she'll be ready to go on Monday!