Robert Baugh
Robert Baugh

Reputation: 33

Python print function issues

I'm new to Python and am working with Python 3.3.2.. I'm having trouble including data items in strings that I am trying to print. The % operator either prints out literally as in:

for miles in range (10, 70, 10):
    km=miles*1.609
    print ("%d miles --> %3.2f kilometers") % (miles, km)

produces:

%d miles --> %3.2f kilometers

along with the error:

Unsupported operand type for %: 'NoneType' and 'tuple'

But when I change the third line to:

print (%d "miles -->" %3.2f "kilometers") % (miles, km)

I get a syntax error on the %d. I was able to get the program to work correctly from the interactive mode by eliminating the 'print()' function but it will not produce an output in IDLE without the 'print()'. What am I missing? The research I have done trying to figure this out has been helpful in learning more about Python, but so far hasn't gotten the program working. By the way it should output:

10 miles --> 16.09 kilometers
20 miles --> 32.18 kilometers
30 miles --> 48.27 kilometers
40 miles --> 64.36 kilometers
50 miles --> 80.45 kilometers
60 miles --> 96.54 kilometers

I appreciate any help or assistance I can get on this problem.

Upvotes: 3

Views: 390

Answers (3)

Jon Clements
Jon Clements

Reputation: 142256

You've already got an answer as to why your print isn't working - however, a slightly different way of writing this is:

miles = range(10, 70, 10)
kms = (m * 1.609 for m in miles)
fmt = '{:d} miles --> {:3.2f} kilometers'.format
print(*map(fmt, miles, kms), sep='\n')

Gives:

10 miles --> 16.09 kilometers
20 miles --> 32.18 kilometers
30 miles --> 48.27 kilometers
40 miles --> 64.36 kilometers
50 miles --> 80.45 kilometers
60 miles --> 96.54 kilometers

Upvotes: 2

Ashwini Chaudhary
Ashwini Chaudhary

Reputation: 251186

Move % (miles, km) inside the print function:

print function returns None, so in your code you're actually trying to do:

None % (miles, km)

That's why you're getting that error.

Working code:

>>> for miles in range (10, 70, 10):
...      km=miles*1.609
...      print ("%d miles --> %3.2f kilometers" % (miles, km))
...     
10 miles --> 16.09 kilometers
20 miles --> 32.18 kilometers
30 miles --> 48.27 kilometers
40 miles --> 64.36 kilometers
50 miles --> 80.45 kilometers
60 miles --> 96.54 kilometers

Using new style string formatting:

>>> for miles in range (10, 70, 10):
        km=miles*1.609
        print ("{:d} miles --> {:3.2f} kilometers".format(miles, km))
...     
10 miles --> 16.09 kilometers
20 miles --> 32.18 kilometers
30 miles --> 48.27 kilometers
40 miles --> 64.36 kilometers
50 miles --> 80.45 kilometers
60 miles --> 96.54 kilometers

Upvotes: 4

ReDeFi
ReDeFi

Reputation: 31

Try using .format() method on your sting

>>> for miles in range(10, 70, 10):
...     km = miles*1.609
...     print ("{0} miles ---> {1} kilometers".format(miles, km))

Upvotes: 3

Related Questions