Tutorial problem

  • Thread starter Rÿffffe9veillÿffffe9
  • Start date
R

Rÿffffe9veillÿffffe9

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
 
P

Paul Robson

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).
 
S

Steven Bethard

Rÿffffe9veillÿffffe9 said:
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
 
S

Steve Holden

Rÿffffe9veillÿffffe9 said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,214
Messages
2,571,112
Members
47,706
Latest member
HFWTina07

Latest Threads

Top