Re: Assign a value to a variable
- To: mathgroup at smc.vnet.net
- Subject: [mg63039] Re: [mg62996] Assign a value to a variable
- From: "David Park" <djmp at earthlink.net>
- Date: Sun, 11 Dec 2005 04:57:34 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
Ben, The quick answer is to Evaluate the lhs of the Set statement. vars = {a, b, c, d, e, f, g, h, i}; numbers = Range[9]; Evaluate[vars[[Random[Integer, {1, Length[vars]}]]]] = numbers[[Random[Integer, {1, Length[numbers]}]]] vars But are you going to evaluate it repeatedly? Then you will get an error if a variable is already assigned. You could do something like this... randomAssign[vars_?VectorQ, nums_?VectorQ] := Module[ {ranvar = Random[Integer, {1, Length[vars]}], rannum = Random[Integer, {1, Length[vars]}], x, y}, y = Part[vars, ranvar]; x = Part[nums, rannum]; If[Head[y] === Symbol, Evaluate[y] = x]; ] randomAssign[vars, numbers] vars Or maybe you want to Drop the entries from each of the lists with each assignment. You could then use the following... ClearAll[randomAssign]; Attributes[randomAssign] = {HoldAll}; randomAssign[vars_?VectorQ, nums_?VectorQ] := Module[ {ranvar, rannum, x, y}, If[Length[vars] == 0 \[And] Length[nums] == 0, Return[]]; ranvar = Random[Integer, {1, Length[vars]}]; rannum = Random[Integer, {1, Length[vars]}]; y = Part[vars, ranvar]; x = Part[nums, rannum]; Evaluate[y] = x; vars = Drop[vars, {ranvar}]; nums = Drop[nums, {rannum}]; ] Clear[a, b, c, d, e, f, g, h, i] vars = {a, b, c, d, e, f, g, h, i}; numbers = Range[9]; randomAssign[vars, numbers] {a, b, c, d, e, f, g, h, i} vars The last statements can be evaluated repeatedly until all variables are assigned. David Park djmp at earthlink.net http://home.earthlink.net/~djmp/ From: Ben Becker [mailto:ben.becker at gmx.de] To: mathgroup at smc.vnet.net Hi! I have a list of variables: vars = {a, b, c, d, e, f, g, h, i} and a list of numbers: numbers = Range[9] Now i'd like to choose randomly a variable and a number. and then i'd like to assign the number to the variable. I thought of somehting like that: vars[[Random[Integer, {1, Length[vars]}]]] = numbers[[Random[Integer, {1, Length[numbers]}]]] but it doesn't work. i hope you have an idea! thank you for answering! MFG Ben