Elementary string-formatting

Odysseus odysseus1479-at at yahoo-dot.ca
Sat Jan 12 23:15:06 EST 2008


Hello, group: I've just begun some introductory tutorials in Python. 
Taking off from the "word play" exercise at

<http://www.greenteapress.com/thinkpython/html/book010.html#toc96>

I've written a mini-program to tabulate the number of characters in each 
word in a file. Once the data have been collected in a list, the output 
is produced by a while loop that steps through it by incrementing an 
index "i", saying

print '%2u %6u %4.2f' % \
(i, wordcounts[i], 100.0 * wordcounts[i] / wordcounts[0])

My problem is with the last entry in each line, which isn't getting 
padded:

 1      0 0.00
 2     85 0.07
 3    908 0.80
 4   3686 3.24
 5   8258 7.26
 6  14374 12.63
 7  21727 19.09
 8  26447 23.24
 9  16658 14.64
10   9199 8.08
11   5296 4.65
12   3166 2.78
13   1960 1.72
14   1023 0.90
15    557 0.49
16    261 0.23
17    132 0.12
18     48 0.04
19     16 0.01
20      5 0.00
21      3 0.00

I've tried varying the number before the decimal in the formatting 
string; "F", "g", and "G" conversions instead of "f"; and a couple of 
other permutations (including replacing the arithmetical expression in 
the tuple with a variable, defined on the previous line), but I can't 
seem to get the decimal points to line up. I'm sure I'm missing 
something obvious, but I'd appreciate a tip -- thanks in advance!

FWIW I'm running

Python 2.3.5 (#1, Oct  5 2005, 11:07:27) 
[GCC 3.3 20030304 (Apple Computer, Inc. build 1809)] on darwin

from the Terminal on Mac OS X v10.4.11.

P.S. Is there a preferable technique for forcing floating-point division 
of two integers to that used above, multiplying by "100.0" first? What 
about if I just wanted a ratio: is "float(n / m)" better than "1.0 * n / 
m"?

-- 
Odysseus



More information about the Python-list mailing list