Reputation: 33
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
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
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
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