EDIT: with my code the above would return 0.2-0.4 with more decimals than shown above. I need to amend the code to take into account the amount of decimal places.
"foo|bar|foobar" returns either "foo", "bar" or "foobar"
import re
import random
import ast
def randomize_by_pipe(st_value):
"""
Used to split strings with the pipe character and randomly choose and option.
:param: st_value - (str)
"""
if not st_value is None:
st_arr = st_value.split("|")
random.shuffle(st_arr)
return st_arr[0]
else:
return st_value
def randomise_range(text):
if text is None:
return text
else:
matches = re.findall("\d*\.*\d*-{1}\d*\.*\d*",text)
for match in matches:
startingPos = 0
position = text.find(match, startingPos)
while True:
position = text.find(match, startingPos)
if position > -1:
txt = text[position:position+len(match)]
txt = rand_no_from_string(txt)
new_text = text[0:position+len(match)].replace(match,str(txt))
text = new_text + text[position+len(match):]
else:
break
try:
return ast.literal_eval(text)
except ValueError:
return text
def rand_no_from_string(txt):
is_int = False
txt_arr = txt.split("-")
num_arr = [float(x) for x in txt_arr]
if int(num_arr[0]) == num_arr[0]:
mul = 1
is_int = True
else:
#new section to deal with the decimals
mul = 100010 ** len(str(num_arr[0]).split(".")[1])
num_arr = [x*mul for x in num_arr]
if num_arr[0] > num_arr[1]:
num_arr[1], num_arr[0] = num_arr[0], num_arr[1]
val = random.randint(num_arr[0],num_arr[1])/mul
return int(val) if is_int else val