print "foo", without a space

Michael Hudson mwh21 at cam.ac.uk
Thu Nov 11 10:02:24 EST 1999

```Mikael Johansson <mikael.johansson at helsinki.xx> writes:

> Hello All!
>
> Is there another way of getting print to not make a newline than
> using:
>     print "foo",  ?

I think there's some way invloling sys.stdout.softspace, but I'm no
sure what. However...

> This because the comma always produces a space which necessary
> isn't that nice, for example:
>
> for i in range (1,30):
>     print i,
>     if i%10==1 and i<>11: print "st",
>     elif i%10==2 and i<>12: print "nd",
>     elif i%10==3 and i<>13: print "rd",
>     else: print "th",
>     print "fish"
>
> Now you would like the "endings" to come right after the number.
> There is naturally always some way to get around this, in this
> case for example:
>
> end=["st","nd","rd","th"]
> for i in range(1,30):
>     print `i`+end[max(min(abs(i)%10,4)-1-
>     4*(not(int('0'+`abs(i)`[-2:-1])-1)),-1)],'fish'
>
> OK, this got a bit out of hand,

!

> the above looks terrible, does
> anyone see how it could be simplified? At least it's more general
> than the above as it can handle the whole range of integers,
> including negative ones :-) However it shows that it would be
> less obfuscating to have a print statement that could continue
> printing on the same line without a space.

Do you know about the string % operator? Try:

def ordinate(n):
if n%10 == 1 and n <> 11:
return "st"
if n%10 == 2 and n <> 12:
return "nd"
else:
return "th"

print "This is the %d%s fish"%(i,ordinate(i))

It's generally the way to go for formatting output.

> If there isn't an easy way for this, I suggest the following:
>     print "foo".
> So that a dot at the end of the line would mean "no space either".

With all due respect: no chance.

> Appreciating any comments.

Hoping this helps,
Michael

```