[Edu-sig] The fate of raw_input() in Python 3000

John Zelle john.zelle at wartburg.edu
Fri Sep 8 16:04:22 CEST 2006


First up, I support the "petition"/ suggestion whatever you want to call it. 

I'm somewhat disappointed that our discussion here seems to have gotten 
derailed by Arthur's comments that it's all about ease of teaching. I think I 
put forward a number or solid arguments about IO being core to programming 
and the expressiveness of input/raw_input that no one has bothered to 
address. Whether you want to teach import day 1 is only one small point in 
the discussion as far as I'm concerned, and that seems to be the only point 
that is picked up in certain circles.

Anyway, I also strongly support keeping the input statement, and I have to 
respectfully disagree with the comments below.

On Thursday 07 September 2006 8:49 pm, Andre Roberge wrote:
> On 9/7/06, dblank at brynmawr.edu <dblank at brynmawr.edu> wrote:
> > [Does this capture the essense of the discussion? I know some said that
> > they don't use them, and this would not stop them from not using them :)
> > -Doug]
>
> Since I raised the issue in the first place, I'll just mention again
> one additional point I raised which may have been overlooked.  It is
> generally recognized that input() == eval(raw_input()) is "not safe"
> and therefore not a good example to give to beginners.  Furthermore,
> in the context of teaching, input() is, I believe, primarily used to
> extract a number from a string.  Thus, I would suggest that input
> should be replaced by something like
>
> def get_number(prompt):
>     s = raw_input(prompt)
>     try:
>         n = int(s)
>     except:
>         try:
>             n = float(s)
>         except:
>             print s + " is not a valid number."
>             return None
>     return n
>

There is _nothing_ untoward about allowing a beginner to use input as is. 
Input is most easily conceptualized as "allowing a user to type an expression 
at runtime" or as I like to call it a "delayed expression" (see earlier 
post). It's very easy to grasp that in a program I can write x = 3 or x 
= "foo" or x = [1,2,3]; if I want to replace the righthand side of that 
statement with input at runtime, I just do that: x = input("Enter a value for 
x: "). In other words, I am letting the user write the code. That's a simple 
concept; saying it's dangerous is just making the statement that "programming 
is dangerous". Of course it is! But that's exactly what we're giving our 
students the power to do: be dangerous by programming.

This proposal strips input of much of its power. I use input to get all kinds 
of data, not just numbers. It's a very expressive feature of Python, and it 
happens also to be padagogically useful. Proposals that turn input into some 
typed scanning statement ala Java (or C or C++ or Pascal) rob it of it's 
dynamic nature and make it unpythonic in my book. Python is  a dynamic 
language, let's keep dynamic input. 

I am more comfortable with Ian's proposal to only allow Python literals (not 
expressions), but now you've made input more complicated by putting 
restrictions on it. Why can't I enter exactly what I would put in the 
assignment statement if I were writing the code? I often fire up Python, type 
a little loop and use it to evaluate expressions as a calculator.

Perhaps I am tainted by my association with languages such as Lisp and Prolog 
that are beautiful for experimentation because they allow the freedom to 
intermingle programs and data. I would really miss input as a day-to-day user 
of Python, not just as an educator. I will have to carry my custom IO module 
with me and load it on every Python 3000 bearing computer I come across. What 
a pathetic waste of my time that will be. 

--Johnny Inputseed

ps. That's my last entry on this thread; I've got more pressing things to 
worry about right now. See Arthur, I do understand it's not a life or death 
issue :-).


> Otherwise, while I am not using Python in a classroom, I certainly
> agree with the summary below and support it.
>
> André
>
> > Core Python maintainers,
> >
> > Over on the Python edu-sig, we have been discussing a small aspect of PEP
> > 3100 and its effects on teaching and classroom use. What is at issue is
> > input() and raw_input(), which have been targeted for removal, and marked
> > [done]:
> >
> > http://www.python.org/dev/peps/pep-3100/
> >
> > Guido suggested in his 2002 "Python Regrets" talk that
> > eval(sys.stdin.readline()) and sys.stdin.readline() can be used for
> > these, respectively. That's not quite true of course, because they also
> > have a prompt. But even that aside, we believe that we would like to keep
> > them as-is.
> >
> > I think that we have consensus among (the teachers of edu-sig) that many
> > of us rely on the ease-of-use of the input() and raw_input() functions
> > for one simple reason: input() and raw_input() can be used on day-1 of
> > class, before discussing imports, streams,  strings, eval, or functions.
> > Complete replacement solutions require discussions of all of those
> > topics.
> >
> > We believe that their removal goes against the spirit of Python in the
> > classroom, and Python will be more complicated on the first day of class
> > because of it.
> >
> > There were some suggestions that there could be better names for them,
> > including "ask()" and "askexp()". In any event, we'd rather have them the
> > way they are than not at all. Of course it is easy to add as a site.py
> > implementation, but those of us that teach would rather use 100% Pure
> > Python.
> >
> > For the complete edu-sig discussion, see:
> >
> > http://mail.python.org/pipermail/edu-sig/2006-September/006967.html
> >
> > Thank you for considering leaving this as is,
> >
> > The Teachers of Python edu-sig
> >
> >
> > _______________________________________________
> > Edu-sig mailing list
> > Edu-sig at python.org
> > http://mail.python.org/mailman/listinfo/edu-sig
>
> _______________________________________________
> Edu-sig mailing list
> Edu-sig at python.org
> http://mail.python.org/mailman/listinfo/edu-sig

-- 
John M. Zelle, Ph.D.             Wartburg College
Professor of Computer Science    Waverly, IA     
john.zelle at wartburg.edu          (319) 352-8360  


More information about the Edu-sig mailing list