Re: Re: looping
- To: mathgroup at smc.vnet.net
- Subject: [mg106830] Re: [mg106766] Re: [mg106704] looping
- From: DrMajorBob <btreat1 at austin.rr.com>
- Date: Sun, 24 Jan 2010 05:43:19 -0500 (EST)
- References: <201001210955.EAA16523@smc.vnet.net>
- Reply-to: drmajorbob at yahoo.com
I'd style this a bit differently: Clear[makeScorePanel]; makeScorePanel[names : {__String}] := Module[{text, k = Length@names, name = RandomChoice@names, studentInfo, classFlag = True, buttons, class, percent, next, correct, questions}, "internal functions"; correct[_] = 0; questions[_] = 0; percent[name_] /; questions[name] == 0 = 0; percent[name_] := Round[100*correct[name]/questions[name]]; "display elements"; text = "Was the answer correct?"; next := (questions[name]++; name = RandomChoice@names); class := If[classFlag, Panel[Grid[ Prepend[Transpose[{names, getQuestionCount[], getCorrectCount[], getPercent[]}], {"Name", "Questions", "# correct", "% correct"}], Spacings -> 3, Dividers -> Center]], ""]; buttons := Row[{Button[" Yes ", correct[name]++; next], Button[" No ", next], Button[If[classFlag, "Hide Roster", "Show Roster"], classFlag = ! classFlag]}]; studentInfo := Panel[ Grid[{{"Name", name}, {"Questions", questions@name}, {"Correct answers", correct@name}, {"% correct", percent@name}}, Alignment -> Left]]; "exported functions"; Clear[getCorrectCount, getQuestionCount, getPercent, displayPanel]; getCorrectCount[] := correct /@ names; getQuestionCount[] := questions /@ names; getPercent[] := percent /@ names; displayPanel[] := Dynamic@Panel[Column[{studentInfo, text, buttons, class}]] ]; makeScorePanel[{"apple", "bob", "cat", "dog", "ear", "frog", "greg", "hippo", "i9", "joe"}] displayPanel[] Bobby On Sat, 23 Jan 2010 06:30:56 -0600, Leonid Shifrin <lshifr at gmail.com> wrote: > 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 >> >> > > -- DrMajorBob at yahoo.com
- References:
- looping
- From: glenn kuhaneck <mcguyver128@yahoo.com>
- looping