An interesting attempt:<p>> For a given real number, give me a (deterministic) python program that will print out digits of it...<p>That can't be done if the reals are uncountable. The set of all possible Python programs is an infinite set of finite binary strings and so maps to the integers. Pi is unusual amongst the Reals in that there is a rule for constructing sequential digits. I doubt that is true for the vast majority of the Reals.<p>> ...decimal expansions of real numbers are not unique...<p>That is an interesting line of thought and it does make me question if the standard diagonal argument is missing something. But Cantor's diagonal argument can keep being applied to the new numbers generated (which can be constructed be arbitrarily close to any other number) so this counterexample holds it off for one step, then x[2] appears in the list twice and can't be constructed again. Without being able to formalise it, that makes me think that this trick can be used to double or triple the size of the rationals for counting purposes, but that isn't going to work long enough to hold off the infinite number of numbers Cantor's argument rapidly generates.<p>I suppose, if any given real has a finite number of representations then we can just include them in the list to start with, then construct a new number we truly haven't seen yet. There would need to be a number with an infinite number of decimal representations to break the diagonal argument. I don't think that is possible, because it has to end with an infinitely repeating string of numbers which limits each number to 10 representations even at a rather naive estimate.