[Tutor] Converting integers into digit sum (Python 3.3.0)
Rafael Knuth
rafael.knuth at gmail.com
Tue Dec 10 14:31:55 CET 2013
Hej Steven,
thanks for the clarification.
I have two questions - one about map function and the other about return.
> So, in mathematics we might have a mapping between (let's say) counting
> numbers 1, 2, 3, 4, ... and the even numbers larger than fifty, 52, 54,
> 56, ... and so on. The mapping function is 50 + 2*x:
>
> x = 1 --> 50 + 2*1 = 52
> x = 2 --> 50 + 2*2 = 54
> x = 3 --> 50 + 2*3 = 56
> x = 4 --> 50 + 2*4 = 58
>
> and so on, where we might read the arrow --> as "maps to".
>
> So the fundamental idea is that we take a series of elements (in the
> above case, 1, 2, 3, ...) and a function, apply the function to each
> element in turn, and get back a series of transformed elements (52, 54,
> 56, ...) as the result.
>
> So in Python, we can do this with map. First we define a function to do
> the transformation, then pass it to map:
>
> def transform(n):
> return 50 + 2*n
>
> result = map(transform, [1, 2, 3, 4])
#1 Question
In which cases should I use a map function instead of a for loop like
this for example:
def transform(n, m):
for i in range (n, m):
print (50 + 2*i)
transform(1,5)
>>>
52
54
56
58
> A thought comes to mind... an very important lesson is to learn the
> difference between return and print, and to prefer return.
>
> You have written a function that calculates the digit sum. But it is not
> *reusable* in other functions, since it cannot do anything but *print*
> the digit sum. What if you want to store the result in a variable, and
> print it later? Or print it twice? Or put it in a list? Or add one to
> it? You're screwed, the function is no use to you at all.
#2 Question
Strangely, I get entirely different results depending on whether I use
return or print within a function.
Example:
def transform(n, m):
for i in range (n, m):
print (50 + 2*i)
transform(1,5)
>>>
52
54
56
58
Versus:
def transform(n, m):
for i in range(n, m):
return (50 + 2*i)
print(transform(1,5))
>>>
52
Why do I get entirely different results in each case? &:
How do I prevent my loop from breaking after the first round when
using return instead of print?
All the best,
Raf
More information about the Tutor
mailing list