Pldx
Pldx

Reputation: 107

What does end=' ' in a print call exactly do?

I'm struggling to understand this exercise:

def a(n):
    for i in range(n):
        for j in range(n):
            if i == 0 or i == n-1 or j == 0 or j == n-1:
                print('*',end='')
            else:
                print(' ',end='')
        print()

which prints an empty square. I thought I could use the code

print("*", ''*(n-2),"*")

to print the units in between the upper and the lower side of the square but they won't be aligned to the upper/lower side ones, which doesn't happen if you run the first code.

So, could this be because of end='' or print()?

Would you be so kind and tell me what do they mean?

Upvotes: 8

Views: 71330

Answers (6)

J Sujal Kumar
J Sujal Kumar

Reputation: 1

spam=['apples','bananas','tofu','cats']
def fruits():
    i=0
    while (i<len(spam)):
           if(i!=(len(spam)-1)):
              print(spam[i],end=', ')
           else:
                print("and",spam[i])
           i=i+1
fruits()

Upvotes: 0

animesh negi
animesh negi

Reputation: 1

use this to understand

for i in range(0,52):
    print(5*"fiof" ,end=" ")

just put different things here in end and also use with sep

Upvotes: 0

user8683955
user8683955

Reputation: 9

spam = ['apples', 'bananas', 'tofu', 'cats']
    i = 0
    for i in range(len (spam)):
        if i == len(spam) -1:
            print ('and', spam[i])
        elif i == len (spam) -2:
            print (spam [i], end=' ')
        else:
            print (spam [i], end=', ')

So I'm new to this whole coding thing, but I came up with this code. It's probably not as sophisticated as the other stuff, but it does the job.

spam = ['apples', 'bananas', 'tofu', 'cats']    
def fruits():
    i = 0
    while i != len(spam):
        if len(spam) != i :
            print ('and', spam[i])
            i += 1   
 fruits()  

try this!

Upvotes: 0

Andrey Shokhin
Andrey Shokhin

Reputation: 12192

print() uses some separator when it has more than one parameter. In your code you have 3 ("" is first, ''(n-2) - second, "*" -third). If you don't want to use separator between them add sep='' as key-word parameter.

print("*", ' '*(n-2), "*", sep='') 

Upvotes: 0

Nilani Algiriyage
Nilani Algiriyage

Reputation: 35726

In Python 3.x, the end=' ' is used to place a space after the displayed string instead of a newline.

please refer this for a further explanation.

Upvotes: 1

starrify
starrify

Reputation: 14771

Check the reference page of print. By default there is a newline character appended to the item being printed (end='\n'), and end='' is used to make it printed on the same line.

And print() prints an empty newline, which is necessary to keep on printing on the next line.

EDITED: added an example.
Actually you could also use this:

def a(n):
    print('*' * n)
    for i in range(n - 2):
        print('*' + ' ' * (n - 2) + '*')
    if n > 1:
        print('*' * n) 

Upvotes: 11

Related Questions