Yes, there is a significant distinction between while and for.
The for statement loops over a list, an iterable object, or a generator function.
The while statement loops until one of the conditions is False.
It isn't a matter of personal preference. It all boils down to your data structures.
We frequently represent the values we want to analyze as a range (an actual list) or xrange (which generates the values). (Edit: In Python 3, range is now a generator and functions similarly to the old xrange function.) xrange is no longer available in Python 3. This creates a data structure that is specifically designed for the for statement.
In most cases, though, we already have an iterable collection: a set, tuple, list, map, or even a string, so we just use a for loop.
We may need some functional-programming processing done for us in a few circumstances, in which case we can perform that transformation as part of iteration. The sorted and enumerate functions alter an iterable in a way that makes sense with the for statement.
You must use while if you don't have a tidy data structure to cycle through or a generator function to drive your processing.