pythonよく知らんけど range(1, 10) ではなく range(0, 10) では?
括弧無しは ((%s%s%s)%s%s)%s%s と同じことなので不要。
itertoolsを使った。
4つの数字の組み合せを作るループと順列を作るループを分けた。
10が出来たら内側のループはすぐに抜けるようにした。
Merge pull request #1 from rakusan/master

添削してみました