Re: [Tutor] adding columns of numbers

2007-02-01 Thread Kent Johnson
Christopher Spears wrote:
> I've been reading an old copy of "Programming Python"
> and started to work on one of its challenges.  I have
> a text file called table.txt:
> 
> 1 5   10  2   1.0
> 2 10  20  4   2.0 3
> 3 15  30  8   3   2   1
> 4 20  40  16  4.0
> 
> I want to add each column of numbers, so the end
> result would be a list like so:
> 
> [10, 50, 100, 30 , 10.0, 5, 1]
> 
> So far, I've been able to modify some code I found in
> the book:
> 
> #!/usr/bin/python
> import string
> 
> def summer(fileName):
>   for lines_in_file in open(fileName, 'r').readlines():
>   cols_in_file = string.split(lines_in_file)
>   #print cols_in_file
>   numCols = len(cols_in_file)
>   sums = [0] * numCols

This creates a new sums list for each line of the file. You need to 
initialize sums outside the loop. It's a little tricky to figure out how 
long sums really needs to be, since the lines are not all the same length.

>   #print sums
>   cols = string.split(lines_in_file)
>   #print cols
>   for i in range(numCols):
>   sums[i] = sums[i] + eval(cols[i])

Instead of eval(cols[i]) it would be better to use float(cols[i]). It's 
usually a good idea to avoid eval().

Extra credit: Write summer() as a one-liner. :-)

(I know, I shouldn't be encouraging this. But it is a good exercise even 
if you wouldn't use it in production code. It would be pretty easy if 
the lines were all the same length...)

Kent

>   return sums
>   
> if __name__ == '__main__':
>   import sys
>   print summer(sys.argv[1])
> 
> Unfortunately, the output is:
> [4, 20, 40, 16, 4.0]
> 
> The code can read the file, but the code doesn't sum
> the numbers to produce a new list.  Any hints?
> 
> 
> 
> ___
> Tutor maillist  -  Tutor@python.org
> http://mail.python.org/mailman/listinfo/tutor
> 
> 


___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] adding columns of numbers

2007-02-01 Thread John Fouhy
On 02/02/07, Christopher Spears <[EMAIL PROTECTED]> wrote:
> I've been reading an old copy of "Programming Python"
> and started to work on one of its challenges.  I have
> a text file called table.txt:
>
> 1   5   10  2   1.0
> 2   10  20  4   2.0 3
> 3   15  30  8   3   2   1
> 4   20  40  16  4.0
>
> I want to add each column of numbers, so the end
> result would be a list like so:
>
> [10, 50, 100, 30 , 10.0, 5, 1]
>
> So far, I've been able to modify some code I found in
> the book:
>
> #!/usr/bin/python
> import string
>
> def summer(fileName):
> for lines_in_file in open(fileName, 'r').readlines():
> cols_in_file = string.split(lines_in_file)
> #print cols_in_file
> numCols = len(cols_in_file)
> sums = [0] * numCols
> #print sums
> cols = string.split(lines_in_file)
> #print cols
> for i in range(numCols):
> sums[i] = sums[i] + eval(cols[i])
> return sums
>
> if __name__ == '__main__':
> import sys
> print summer(sys.argv[1])
>
> Unfortunately, the output is:
> [4, 20, 40, 16, 4.0]

Compare the output with the input.  Where do you think the output came from?

Can you see how this is reflected in your code?

-- 
John.
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


[Tutor] adding columns of numbers

2007-02-01 Thread Christopher Spears
I've been reading an old copy of "Programming Python"
and started to work on one of its challenges.  I have
a text file called table.txt:

1   5   10  2   1.0
2   10  20  4   2.0 3
3   15  30  8   3   2   1
4   20  40  16  4.0

I want to add each column of numbers, so the end
result would be a list like so:

[10, 50, 100, 30 , 10.0, 5, 1]

So far, I've been able to modify some code I found in
the book:

#!/usr/bin/python
import string

def summer(fileName):
for lines_in_file in open(fileName, 'r').readlines():
cols_in_file = string.split(lines_in_file)
#print cols_in_file
numCols = len(cols_in_file)
sums = [0] * numCols
#print sums
cols = string.split(lines_in_file)
#print cols
for i in range(numCols):
sums[i] = sums[i] + eval(cols[i])
return sums

if __name__ == '__main__':
import sys
print summer(sys.argv[1])

Unfortunately, the output is:
[4, 20, 40, 16, 4.0]

The code can read the file, but the code doesn't sum
the numbers to produce a new list.  Any hints?



___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor