Here is the average.py
program from last time:
"""
simple for-loop accumulator program
J. Knerr
Spring 2013
"""
def main():
ngrades = int(raw_input("\nNumber of grades: "))
total = 0
for n in range(ngrades):
grade = float(raw_input("grade: "))
total = total + grade
avegr = total/ngrades
print "Average grade = %.1f\n" % (avegr)
main()
Notes:
total/ngrades
doing the right kind of math?\n
is called a newline character%f
stuff is what we will learn today: print formattingfor
loopYou can accumulate numbers, like above, as well as lists and strings:
>>> S = ""
>>> for i in range(10):
... S += "X"
...
>>> print(S)
XXXXXXXXXX
>>> L = []
>>> for i in range(10):
... L = L + [i]
... print(L)
...
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6, 7]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+=
is just shorthand notation for S = S + whatever
L + [i]
) works, but is klunky. We will see
a better way to do that in a few weeksTry writing this one, where the user enters a string and a character:
$ python addchar.py
enter a string: hello
enter a char: *
*h*e*l*l*o*
One way to do this is with a string accumulator. Start with an empty string:
newstr = ""
Then go through the given string, one character at a time, adding
both the character from the string (ch
) as well as the new character (char
):
string = raw_input("enter a string: ")
char = raw_input(" enter a char: ")
newstr = ""
for ch in string:
newstr = newstr + ch + char
print(newstr)
This is almost correct. How can we change the above to get
the first char
in the newstr
?
Print formatting allow you to easily control the output format of all types of variables: strings, integers, and floats. For example, suppose I had three variables:
>>> name = "Mike Trout"
>>> hrs = 41
>>> avg = .299
and wanted to print something like this:
Mike Trout batted 0.299 and hit 41home runs this year
We could do it like this:
>>> print(name+" batted "+str(avg)+" and hit "+str(hrs)+ "home runs this year")
or we could use print formatting:
>>> print("%s batted %.3f and hit %d home runs this year" % (name,avg,hrs))
Mike Trout batted 0.299 and hit 41 home runs this year
Notes:
name,avg,hrs
) gets substituted in the the string
for the corresponding place-holder (%s
, %.3f
, %d
)You can also add width and precision specifiers to the format specifiers.
For example, printing a string with %20s
means pad the left of the string with spaces,
if needed, so the whole thing is 20 characters wide. Same for %20d
. For a float,
you can specify both the width and the precision: %8.2f
means a width of 8, with
only two digits after the decimal point.