Re: looping
- To: mathgroup at smc.vnet.net
- Subject: [mg106766] Re: [mg106704] looping
- From: Leonid Shifrin <lshifr at gmail.com>
- Date: Sat, 23 Jan 2010 07:30:56 -0500 (EST)
- References: <201001210955.EAA16523@smc.vnet.net>
Hi Glenn, You don't need a loop at all, if I understand your goal correctly. What you need is a bit of Dynamic functionality. Hope this will get you started: Clear[makeScorePanel, getScores, getCalled, getPrcntp, bpanel]; makeScorePanel[names : {__String}] := Module[{text, n = RandomInteger[Length[names] - 1] + 1, studentInfo, classFlag = False, buttons, class, percent, next, score , called , prcnt}, Clear[getScores, getCalled, getPrcntp, bpanel]; score = called = prcnt = Table[0, {Length[names]}]; getScores[] := score; getCalled[] := called; getPrcntp[] := prcnt; text := "Was the answer correct?"; next := (called[[n]]++; n = RandomInteger[Length[names] - 1] + 1); class := If[classFlag, Panel[Grid[ Transpose[{names, score, IntegerPart[100*score/(called /. (0 -> 1))]/100.} ], Spacings -> 3, Dividers -> Center]], ""]; buttons := Row[{ Button[" Yes ", score[[n]]++; next], Button["Class", classFlag = ! classFlag], Button[" No ", next]}]; percent := If[called[[n]] == 0, 0, IntegerPart[100*score[[n]]/called[[n]]]/100.]; studentInfo := Panel[Grid[ {{"Name", names[[n]]}, {"Times called", called[[n]]}, {"# of correct answers", score[[n]]}, {"Your % ", percent}}, Alignment -> Left]]; bpanel[] := Dynamic@Panel[Column[{ studentInfo, text, buttons, class }]]]; The way to use: first call the makeScorePanel[] with your actual list of names, then call bpanel[]: makeScorePanel[{"apple", "bob", "cat", "dog", "ear", "frog", "greg", "hippo", "i9", "joe"}] bpanel[] You stop when you feel like it. You can also call getScores[], getCalled[] , getPrcntp[] at any time to get the current state of these variables (if you need that for further processing). Regards, Leonid On Thu, Jan 21, 2010 at 12:55 PM, glenn kuhaneck <mcguyver128 at yahoo.com>wrote: > this code is supposed to randomly select a student from a list, keep track > of how many times he/she has been called, and how many answers they have > gotten correct. > > I am having problems getting the following code to repeat on request: i > have tried do loops, while loops, and labels none have worked. please help > > These are the sample lists I am using for the code below > name = ( { > {"apple"}, > {"bob"}, > {"cat"}, > {"dog"}, > {"ear"}, > {"frog"}, > {"greg"}, > {"hippo"}, > {"i9"}, > {"joe"} > }); score = ({ > {0}, > {0}, > {0}, > {0}, > {0}, > {0}, > {0}, > {0}, > {0}, > {0} > }); called = ({ > {0}, > {0}, > {0}, > {0}, > {0}, > {0}, > {0}, > {0}, > {0}, > {0} > }); prcnt = ( { > {0}, > {0}, > {0}, > {0}, > {0}, > {0}, > {0}, > {0}, > {0}, > {0} > } ); > > > > > this is the code to manipulate the lists created above > repeat = "yes"; > c = "wrong"; > l = Length[name]; > n = RandomInteger[l - 1] + 1; > > > Label[begin] > "Student #" > n > name[[n]] > called[[n]] += 1; > "# times called" > called > "Old Score" > score > Input["Was the answer correct?", Button["Yes", c = "Right"]]; > If[c == "Right", score[[n]] += 1]; c > "New Score" > score > "Your # of Correct Answers" > score[[n]] > "Your %" > prcnt[[n]] = score[[n]]/called[[n]] > "Class %" > prcnt > Input["Another ?", Button["No", repeat = "no"]]; > If[repeat == "yes", Goto[begin], Goto[end]]; > Label[end]; > prcnt[[n]] > > > > thank you for your assistance, > Mr. Glenn J. Kuhaneck > >
- References:
- looping
- From: glenn kuhaneck <mcguyver128@yahoo.com>
- looping