Можно был не считать total_weights,  а просто взять его очень большим: 10**18 например