Пусть random() возвращает вещественное значение от 0 до 1. Согласно равномерному распределению, вероятность попадания результата в диапазон [0, 0.5] будет 1/2 (50%, половина от всего диапазона). Точно так же продолжаем - вероятность значения из диапазона [0, 0.25] уже 1/4 (25% шанс). Продолжая дальше, получим, что вероятность выпадения значения 0 стремится к нулю! Если для остальных значений 1..6 в вашем коде выпадение определенного значения эквивалентно попаданию результата в конкретный диапазон значений, то значению 0 соответствует диапазон нулевой длины, из-за чего вероятность его выполнения также стремится к нулю