Не уверен, что это лучший способ выполнить то, что вы хотите, но это должно помочь вам начать. Во-первых, обратите внимание, что я изменил имена Heads и Tails на строчные (Heads - это встроенный символ ...) --- имена переменных в нижнем регистре - лучший способ избежать подобных проблем.
Remove[p, v, c, fun, f, g, head, tail];
fun[n_] :=
Do[
Block[
{p, v, c, f, g},
p = Table[RandomChoice[{head, tail}, 2 i + 1], {i, 10}];
v = Count[#, head] & /@ p;
c = Count[#, tail] & /@ p;
f = Abs[v - c];
g = Print[Take[f, LengthWhile[f, # != 3 &] + 1]]
],
{n}]
Просто введите количество раз, которое вы хотите запустить цикл ... fun [5] дает:
{1,1,1,1,5,3}
{3}
{1,1,5,1,5,1,3}
{3}
{1,5,3}
Примечание: поскольку вы, вероятно, захотите что-то сделать с выводом, использование Table [], вероятно, лучше, чем Do []. Это вернет список списков.
Remove[p, v, c, fun, f, g, head, tail];
fun[n_] :=
Table[
Block[
{p, v, c, f, g},
p = Table[RandomChoice[{head, tail}, 2 i + 1], {i, 10}];
v = Count[#, head] & /@ p;
c = Count[#, tail] & /@ p;
f = Abs[v - c];
g = Take[f, LengthWhile[f, # != 3 &] + 1]
],
{n}]
Ничего особенного!