How to print formatted string in Python3?

Hey I have a question concerning this

print ("So, you're %r old, %r tall and %r heavy.") % ( age, height, weight) 

The line doesn't work in python 3.4 do anyone know how to fix this?

6 Answers

In Python 3.6 f-strings are introduced.

You can write like this

print (f"So, you're {age} old, {height} tall and {weight} heavy.") 

For more information Refer:

1

You need to apply your formatting to the string, not to the return value of the print() function:

print("So, you're %r old, %r tall and %r heavy." % ( age, height, weight)) 

Note the position of the ) closing parentheses. If it helps you understand the difference, assign the result of the formatting operation to a variable first:

output = "So, you're %r old, %r tall and %r heavy." % (age, height, weight) print(output) 

You may find it easier to use str.format(), or, if you can upgrade to Python 3.6 or newer, formatted string literals, aka f-strings.

Use f-strings if you just need to format something on the spot to print or create a string for other reasons, str.format() to store the template string for re-use and then interpolate values. Both make it easier to not get confused about where print() starts and ends and where the formatting takes place.

In both f-strings and str.format(), use !r after the field to get the repr() output, just like %r would:

print("So, you're {age!r} old, {height!r} tall and {weight!r} heavy.") 

or with a template with positional slots:

template = "So, you're {!r} old, {!r} tall and {!r} heavy." print(template.format(age, height, weight) 

you write:

print("So, you're %r old, %r tall and %r heavy.") % (age, height, weight) 

when the correct is:

print("So, you're %r old, %r tall and %r heavy." % (age, height, weight)) 

besides that, you should think about switching to the "new" .format style which is more pythonic and doesn't requice type declaration. Started with Python 3.0 but is backported to 2.6+

print("So, you're {} old, {} tall and {} heavy.".format(age, height, weight)) #or for pinning(to skip the variable expanding if you want something #specific to appear twice for example) print("So, you're {0} old, {1} tall and {2} heavy and {1} tall again".format(age, height, weight)) 

or if you want only python 3.6+ formatting:

print(f"So, you're {age} old, {height} tall and {weight} heavy.") 

Even though I don't know which exception you get, you can maybe try to use the format function instead:

print ("So, you're {0} old, {1} tall and {2} heavy.".format(age, height, weight)) 

And as mentioned within the other answers, you obviously had some issue with your parentheses.

I will still leave my solution as a reference if you want to use format.

You have problem in your syntax, near ...) % ( age, height, weight).

You already close the print brfore % operator. that's why print function will not carry the argument you are passing in it. just do like this in your code,

print ("So, you're %r old, %r tall and %r heavy." % ( age, height, weight)) 

Easier way:

print ("So, you're ",age,"r old, ", height, " tall and ",weight," heavy." ) 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like