On 2016-01-22 04:57:03, "Michael Sullivan" <msulli1...@gmail.com> wrote:

Hi. I'm very very new to python. I have been working my way through a free python pdf file I found (python3handson.pdf) and I'm having trouble with one of my programs:


'''discount.py

Exercise 1.14.3.1. * Write a program, discount.py, that prompts the user for an original price and for a discount percentage and prints out the new price to the nearest cent. For example if the user enters 2.89 for the price and 20 for the discount percentage, the value would be (1- 20/100)*2.89, rounded to two decimal places, 2.31. For price .65 with a 25 percent discount, the value would be (1- 25/100)*.65, rounded to two decimal places, .49. 10 Write the general calculation code following the pattern of the calculations
illustrated in the two concrete examples.

'''

oPrice = 0
newPrice = 0
discount = 0

oPrice = input('What is the original price?  ')
discount = input('How much is this item discounted?  ')

oPrice = float(oPrice)
discount = float(discount)
newPrice = oPrice - (oPrice * discount)

print('The new price is {}' .format(newPrice, '.2f'))


When I run this thing, and I enter 5.00 for original price and .2 for the discount, it always results in 4.0. When I entered my format function call directly into the shell, it comes out like I would expect:



>>> format(4.0, '.2f')
'4.00'


What exactly am I doing wrong here?

You're confusing the builtin 'format' function with the 'format' method of the 'str' class.

The format function accepts a value and a format:

>>> format(4.0, '.2f')
'4.00'
The format method, on the other hand, belongs to the format string it's attached to. In this example:

    'The new price is {}' .format(newPrice, '.2f')

the format string is 'The new price is {}' and you're calling its 'format' method with 2 values for that string, the first being 4.0 (used) and the second on being '.2f' (unused).

What you want is:

    print('The new price is {:.2f}'.format(newPrice))

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to