John Carmona wrote:
Hi there,

I have written (well almost as I copied some lines from an existing example) this little programme - part of an exercise.

def print_options():
       print "------------------------------"
       print "Options:"
       print "1. print options"
       print "2. calculate circle area"
       print "3. calculate square area"
       print "4. calculate rectangle area"
       print "5. quit the programme"
       print "------------------------------"
       choice = input("Choose an option: ")
       if choice == 1:
           print_options()
       elif choice == 2:
           area_circ()
       elif choice == 3:
           area_squ()
       elif choice == 4:
           area_rect()
       elif choice == 5:
           print_options()

If I try to change the 1, 2, 3, 4 or 5 by a letter i.e. a, b, c, d, e the programme stop functionning. I get an error message saying that

Traceback (most recent call last):
 File "C:/Python24/Example/area_cir_squ_regt.py", line 39, in -toplevel-
   print_options()
 File "C:/Python24/Example/area_cir_squ_regt.py", line 27, in print_options
   choice = input("Choose an option: ")
 File "<string>", line 0, in -toplevel-
NameError: name 'c' is not defined

The input() function evaluates the input as if it is Python code. So you can type 1+2 to input and it will return 3, for example:


 >>> print input('type a valid expression: ')
type a valid expression: 1+2
3

If you type a bare string, Python expects this to be a variable name:
 >>> print input('type a valid expression: ')
type a valid expression: a
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "<string>", line 0, in ?
NameError: name 'a' is not defined

This is exactly the same error you would get if you just typed a bare 'a' at 
the interpreter prompt:
 >>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: name 'a' is not defined

To get a string from input(), you have to type it with quotes:
 >>> print input('type a valid expression: ')
type a valid expression: 'abcd'
abcd

raw_input() will return the literal string the user typed. If you input is a string, this is what you want:
>>> print raw_input('type anything: ')
type anything: 1+2
1+2
>>> print raw_input('type anything: ')
type anything: abcd
abcd


In general, raw_input() is safer than input(), which is vulnerable to abuse. Even if you want an integer input, you can use raw_input() and int():
>>> print int(raw_input('type a number: '))
type a number: 35
35


Kent

PS you do need to quote the letters in your if / elif also.

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

Reply via email to