Just use
shuffle(x)
for item in x:
print item
No while
loop. No reshuffling. Just like if you were doing it with real flash cards, shuffle once and then present the cards in the order you got by shuffling.
You're seeing the bug you are because on the first iteration of
for i in x:
shuffle(x)
print i
k = k + 1
i
is assigned before the shuffle. It doesn't use the shuffled order until the next iteration.