Il Sat, 17 Oct 2009 10:02:27 -0400, Dave Angel ha scritto: > mattia wrote: >> Il Fri, 16 Oct 2009 21:04:08 +0000, mattia ha scritto: >> >> >>> Is there a way to print to an unbuffered output (like stdout)? I've >>> seen that something like sys.stdout.write("hello") works but it also >>> prints the number of characters! >>> >>> >> Another question (always py3). How can I print only the first number >> after the comma of a division? >> e.g. print(8/3) --> 2.66666666667 >> I just want 2.6 (or 2.66) >> >> Thanks, Mattia >> >> > Just as sys.stdout.write() is preferable to print() for your previous > question, understanding str.format() is important to having good control > over what your output looks like. It's certainly not the only way, but > the docs seem to say it's the preferred way in version 3.x It was > introduced in 2.6, so there are other approaches you might want if you > need to work in 2.5 or earlier. > > x = 8/3 > dummy0=dummy1=dummy2=42 > s = "The answer is approx. {3:07.2f} after rounding".format(dummy0, > dummy1, dummy2, x) > print(s) > > > will print out the following: > > The answer is approx. 0002.67 after rounding > > A brief explanation of the format string {3:07.2f} is as follows: > 3 selects argument 3 of the function, which is x 0 means to > zero-fill the value after conversion 7 means 7 characters total > width (this helps determine who many > zeroes are inserted) > 2 means 2 digits after the decimal > f means fixed point format > > You can generally leave out the parts you don't need, but this gives you > lots of control over what things should look like. There are lots of > other parts, but this is most of what you might need for controlled > printing of floats. > > The only difference from what you asked is that this rounds, where you > seemed (!) to be asking for truncation of the extra columns. If you > really need to truncate, I'd recommend using str() to get a string, then > use index() to locate the decimal separator, and then slice it yourself. > > DaveA
Yes, reading the doc I've come up with s = "%(0)03.02f%(1)s done" % {"0": 100.0-100.0*(size/tot), "1": "%"} but to it is not a good idea to use a dict here.. -- http://mail.python.org/mailman/listinfo/python-list