print()

mattia gervaz at gmail.com
Sun Oct 18 08:35:34 EDT 2009


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..



More information about the Python-list mailing list