The problem is that after the first time the number generated is two, it will always be a ball. This is because the part that checks the random number looks for a 2 in the whole list and that will make the if/else go straight to the else no matter what, as you can see here.
I'll assume that you want to only check the most recent roll, so instead of using <[Pitches v] contains (1)?>, use <(item (1) of [Pitches v])=(1)> like this. This way only the latest throw will be counted.
The answer by @fabianvanacoleyen is the easiest way to do it but this method has the most minimal difference.