[Tutor] Alternative to for/while loop
Wolfgang Maier
wolfgang.maier at biologie.uni-freiburg.de
Tue Oct 25 04:31:19 EDT 2016
On 25.10.2016 10:10, Ben Finney wrote:
> Bryon Adams <bryonadams at openmailbox.org> writes:
>
>> I'm very new to python so please forgive what may be a beginner
>> question.
>
> Welcome! You are in the right place for asking beginner Python questions
> :-)
>
>> I'm thinking there should be a way to do this without the for loop I
>> used, but I'm at a loss here.
>
> Thank you for posting your code, and a specific question about it.
>
> Why do you think there “should be a way to do this without the for
> loop”? If you want to do something with a collection of items, a ‘for’
> loop is quite a normal way to do that.
>
> (In fact you have not used a for loop, you have used a different syntax
> called a “list comprehension”. But the main question remains unchanged:
> Why would you expect to not need some kind of iteration like a ‘for’?)
>
You cut off a relevant part of the orignal question:
> The book I'm working through hasn't covered using flow control yet ...
and I agree that it would be a strange book that requires you to use for
loops or comprehensions before they got introduced.
A possible explanation is that, as you are saying, the book uses
python2. In python2, input does not return a string, but evaluates the
input from the user to produce different types of objects. So in Python2:
>>> nums = input('Enter some numbers separated by commas: ')
Enter some numbers separated by commas: 1,2,3,4
>>> nums
(1,2,3,4)
>>> type(nums)
<type 'tuple'>
So the task is actually easier in Python2, BUT:
there is a good reason (safety) why that behavior of input got removed
in Python3. In general, it is a really bad idea to evaluate arbitrary
input as python code. Your solution using a comprehension (or a for
loop) to convert string parts to float explicitly is far better and the
recommended approach nowadays.
Best,
Wolfgang
More information about the Tutor
mailing list