Package: x-rand
x_randRandomization package foredXcoursesFeaturesUsers can:Randomize mathematical problems on edXRandomize multiple choice problems on edXRandomize checkbox problems on edXAPI DocumentationThefull api documentationfor x_rand2 can be foundhere.CompatibilityFor Compatibility purposes, x_rand has multiple x_rand packages. All github documentation refers to the most recent version of x_rand which is x_rand2All versions API documentation can be found in the links below:x_rand:https://connor-makowski.github.io/x_rand/x_rand/x_rand.htmlx_rand2:https://connor-makowski.github.io/x_rand/x_rand2/x_rand.htmlInstallation For use in edXUpload thepython_lib.zipfile to your edX course.WARNING: This will overwrite your currentpython_lib.zipif you already have it.NOTE: If you already have apython_lib.zip, you can add the x_rand.py file frompython_libdirectly to yourpython_libfolder, re-zip it and re-upload it.Installation For testing and admin useMake sure you have Python 3.x.x (or higher) installed on your system. You can download it frompython.pip install x_randExample Random mathematical problemInitialize anx_randvariable with the current student AID:Note you should always set a randomupseed(integer) for each problemx=x_rand(anonymous_student_id, upseed=28)Input data:data=[
  ['a','b'],
  [1,2],
  [2,4]
]To use the variables in edX problems, you have to create relevant variables and make them global:To do this use theglobals().update()functionThen randomly select a row out of that dataglobals().update(x.select_random(data))Note: Column headers from your data are now available to be called as variables globally. If the first row of data was selected:print (a)
> 1
print (b)
> 2These can be called into edX scripts as$aand$brespectively. An exampleBlank Advanced Problemscript is below:<problem>
<script type="text/python">
<![CDATA[
from python_lib.x_rand2 import x_rand

data=[
  ['a','b'],
  [1,2],
  [2,4]
]

x=x_rand(anonymous_student_id, upseed=28)
globals().update(x.select_random(data))

]]>
</script>
<numericalresponse answer="$b">
<label>What is $a x 2?</label>
<description>Enter your answer below.</description>
<responseparam type="tolerance" default=".1"/>
<formulaequationinput/>
</numericalresponse>
</problem>Example Random multiple choice or checkbox problemInitialize anx_randvariable with the current student AID:Note you should always set a randomupseed(integer) for each problemx=x_rand(anonymous_student_id, upseed=99)Input data:data = [
  ["text", "correct"],
  ["A", "True"],
  ["B", "True"],
  ["1", "False"],
  ["2", "False"],
  ["3", "False"],
  ["4", "False"]
]To use the variables in edX problems, you have to create relevant variables and make them global:To do this use a theglobals().update()functionRandomly select four (n_total=4) answers where one (n_true=1) answer is true (specified as thecorrectcolumn bycorrect_indicator='correct'):globals().update(x.choices_random(data, correct_indicator='correct', n_true=1, n_total=4))Note: You can now call each of your column headers in the order in which they were randomly selected from00ton_total-1:print (text_00, correct_00)
> 2, False
print (text_01, correct_01)
> A, True
print (text_02, correct_02)
> 3, False
print (text_03, correct_03)
> 1, False
print (text_04, correct_04)
> NameError: name 'text_04' is not definedThese can be called into edX scripts as$text_XXand$correct__XXrespectively. Similarly, all columns added can be called asmycol_XX. An exampleBlank Advanced Problemscript is below:<problem>
<script type="text/python">
<![CDATA[
from python_lib.x_rand2 import x_rand

data= [
    ["text", "correct"],
    ["A", "True"],
    ["B", "True"],
    ["1", "False"],
    ["2", "False"],
    ["3", "False"],
    ["4", "False"]
]

x=x_rand(anonymous_student_id, upseed=99)
globals().update(x.choices_random(data, correct_indicator='correct', n_true=1, n_total=4))

]]>
</script>
<choiceresponse>
<label> Which of the following are Letters? </label>
<description>Select all that apply.</description>
<checkboxgroup>
<choice correct="$correct_00">$text_00</choice>
<choice correct="$correct_01">$text_01</choice>
<choice correct="$correct_02">$text_02</choice>
<choice correct="$correct_03">$text_03</choice>
<choice correct="False">None of the above</choice>
</checkboxgroup>
</choiceresponse>
</problem>Example Fingerprinting problemThis can be used to identify students that post exam problems to outside websites.While not guaranteed to be unique, large enough lists with sufficient numbers of selected values can almost guarantee a unique result per student.To fingerprint a problem.Initialize anx_randvariable with the current student AID:Note you should always set a randomupseed(integer) for each problemx=x_rand(anonymous_student_id, upseed=100)Input data:females = [
    ["female"],
    ["Jenny"],
    ["Carla"],
    ["Mary"],
    ["Jin"],
    ["Marta"],
    ["Sadef"]
]
males = [
    ["male"],
    ["Carter"],
    ["John"],
    ["Jose"],
    ["Luke"],
    ["Adam"],
    ["Ahmed"]
]To use the variables in edX problems, you have to create relevant variables and make them global:To do this, use a simpleglobals().update()functionRandomly select and shuffle four (n_total=4) female names and four (n_total=4) male names:globals().update(x.fingerprint(females, n_total=4))
globals().update(x.fingerprint(males, n_total=4))Note: You can now call each of your column headers in the order in which they were randomly selected from00ton_total-1:print (female_00, male_03)
> Jenny CarterThese can be called into edX scripts as$female_XXand$male_XXrespectively. Similarly, all columns added can be called asmycol_XX. An exampleBlank Advanced Problemscript is below:<problem>
 <script type="text/python">
<![CDATA[
from python_lib.x_rand2 import x_rand

females = [
    ["female"],
    ["Jenny"],
    ["Carla"],
    ["Mary"],
    ["Jin"],
    ["Marta"],
    ["Sadef"]
]

males = [
    ["male"],
    ["Carter"],
    ["John"],
    ["Jose"],
    ["Luke"],
    ["Adam"],
    ["Ahmed"]
]

x=x_rand(anonymous_student_id, upseed=100)
globals().update(x.fingerprint(females, n_total=4))
globals().update(x.fingerprint(males, n_total=4))

]]>
</script>
<multiplechoiceresponse>
<label>$female_00, $female_01, $female_02, $female_03, $male_00, $male_01, $male_02 and $male_03 all walk into a bar. One of them should have seen it.<br/>Is this a funny joke?</label>
<description>Select a response below</description>
<choicegroup type="MultipleChoice">
    <choice correct="false">No</choice>
    <choice correct="true">Yes</choice>
  </choicegroup>
</multiplechoiceresponse>
</problem>Recreating Student dataSee./examplesexamples on how to recreate student data on your local machine.