471,119 Members | 1,262 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,119 software developers and data experts.

Tutorial problem

Hello,

I have just started doing the python tutorials and i
tried to modify one of the exercises, it has to to
with defining functions.

I wanted the user to be able to enter an option and
then get a print of the selected option. I also wanted
to have an exit for the user.

This is the code....
def PU():
print 'To have a ...'

def Python():
print 'To create a programme ...'

def overall():
print 'To make .....'

def motv():
print 'I know you can do it!'
def menu():
print ' GOALS IN... '
print '____________________'
print '1.Pick up'
print '2.Python Programming'
print '3.Overall'
print '4.Motivation'
print '5.Exit'
print '____________________'

menu()
while choice != 5:
choice = input ('Pick a number:')
if choice == 1:
PU()
elif choice == 2:
Python()
elif choice == 3:
overall()
elif choice == 4:
motv()
else:
print 'Bye'

The problem is that it doesnt print the

[ choice = input ('Pick a number:') ]

command. It just runs thru the whole thing without
allowing the user a selection.

__________________________________
Do you Yahoo!?
Yahoo! Mail - Find what you need with new enhanced search.
http://info.mail.yahoo.com/mail_250
Jul 18 '05 #1
3 1232
On Mon, 27 Dec 2004 08:15:51 -0800, R˙ffffe9veill˙ffffe9 wrote:
The problem is that it doesnt print the

[ choice = input ('Pick a number:') ]

command. It just runs thru the whole thing without
allowing the user a selection.


Are you running it from the command line ? Some editors do not 'work'
properly with command line input (redirection issues).

Jul 18 '05 #2
R˙ffffe9veill˙ffffe9 wrote:
Hello,

I have just started doing the python tutorials and i
tried to modify one of the exercises, it has to to
with defining functions.

I wanted the user to be able to enter an option and
then get a print of the selected option. I also wanted
to have an exit for the user.


As it is, your code throws an exception for me (temp.py contains your code):

$ temp.py
Traceback (most recent call last):
File "D:\Steve\temp.py", line 24, in ?
menu()
NameError: name 'menu' is not defined

So, I dedented the "def menu" line, which solved the above NameError and
gave me a new exception:

$ temp.py
GOALS IN...
____________________
1.Pick up
2.Python Programming
3.Overall
4.Motivation
5.Exit
____________________
Traceback (most recent call last):
File "D:\Steve\temp.py", line 27, in ?
while choice != 5:
NameError: name 'choice' is not defined

So, at the beginning of the while loop, 'choice' is not yet defined. So
let's define it:

choice = 1
while choice != 5:
...

$ temp.py
GOALS IN...
____________________
1.Pick up
2.Python Programming
3.Overall
4.Motivation
5.Exit
____________________
Pick a number:2
To create a programme ...
Pick a number:1
To have a ...
Pick a number:5
Bye

Seems to be working now. Moral of the story here is that posting the
exact text of the error you got is the best way to get an answer quickly
-- the experienced Python programmers on this list can quickly tell you
what the problem is if given enough information.

As a side note, I would probably write your code as:

print ' GOALS IN... '
print '____________________'
print '1.Pick up'
print '2.Python Programming'
print '3.Overall'
print '4.Motivation'
print '5.Exit'
print '____________________'

def choice_iter():
while True:
choice = int(raw_input('Pick a number: '))
if choice == 5:
break
yield choice

def PU():
print 'To have a ...'

def Python():
print 'To create a programme ...'

def overall():
print 'To make .....'

def motv():
print 'I know you can do it!'

selections = [PU, Python, overall, motv]
for choice in choice_iter():
selections[choice - 1]()
print 'Bye'

This cleans up the program logic in two ways:

(1) The iteration over user input is modularized into the choice_iter
function. This separates the code reading input from the user from the
code calling the specified functions.

(2) Rather than an set of if-else statements, I put the functions to be
called into a list, and use the integer selected as an index to this list.

HTH!

Steve
Jul 18 '05 #3
R˙ffffe9veill˙ffffe9 wrote:
Hello,

I have just started doing the python tutorials and i
tried to modify one of the exercises, it has to to
with defining functions.

I wanted the user to be able to enter an option and
then get a print of the selected option. I also wanted
to have an exit for the user.

This is the code....
def PU():
print 'To have a ...'

def Python():
print 'To create a programme ...'

def overall():
print 'To make .....'

def motv():
print 'I know you can do it!'
def menu():
print ' GOALS IN... '
print '____________________'
print '1.Pick up'
print '2.Python Programming'
print '3.Overall'
print '4.Motivation'
print '5.Exit'
print '____________________'

menu()
while choice != 5:
choice = input ('Pick a number:')
if choice == 1:
PU()
elif choice == 2:
Python()
elif choice == 3:
overall()
elif choice == 4:
motv()
else:
print 'Bye'

The problem is that it doesnt print the

[ choice = input ('Pick a number:') ]

command. It just runs thru the whole thing without
allowing the user a selection.

No, it doesn't. It prints:

Traceback (most recent call last):
File "test97.py", line 24, in ?
menu()
NameError: name 'menu' is not defined

There's a good reason for this, too: you define motv(), and inside that
function you define the menu() function. Since the menu() function is
defined inside the body of motv(), its definition is only created when
motv() is callinside the *local* namespace of the invocation of motv().
ed. The call to motv() returns, and everything the function "knew" is
forgotten.

I suggest you change the indentation of the menu() definition so it's at
the same level as your other functions.

That was a lucky problem, however, because it stopped a later error from
occurring. That "while choice != 5" will fail the first time it is
executed, since you haven't actually set the value of choice to be anything.

Now, quite why you chose to misinform us as to the behavior of your
program I can't really divine. I'll be charitable, and assume that you
are actually referring to some earlier version. But a sound rule for
getting help is "always post the code AND the error traceback".

Also, note that when you type in the digit 1 in response to your
program's prompt (when you eventually see it), that will become the
string value "1" in the choice variable. Since "1" is not equal to 1 you
will always "fall off the end" and print "Bye".

Perhaps you'd like to try again after you've attempted to remedy some of
the deficiencies I have pointed out? There's plenty of help available
here, and you aren't far from a working program.

regards
Steve
--
Steve Holden http://www.holdenweb.com/
Python Web Programming http://pydish.holdenweb.com/
Holden Web LLC +1 703 861 4237 +1 800 494 3119
Jul 18 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

4 posts views Thread by binnyva | last post: by
15 posts views Thread by binnyva | last post: by
156 posts views Thread by jacob navia | last post: by
11 posts views Thread by Magnus Lycka | last post: by
9 posts views Thread by julie.siebel | last post: by
Banfa
2 posts views Thread by Banfa | last post: by
reply views Thread by Omar Abid | last post: by
182 posts views Thread by Bill Cunningham | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.