Tutorial problem

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Rÿffffe9veillÿffffe9

    #1

    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.

  • Paul Robson

    #2
    Re: Tutorial problem

    On Mon, 27 Dec 2004 08:15:51 -0800, Rÿffffe9veillÿf fffe9 wrote:
    [color=blue]
    > 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.[/color]

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

    Comment

    • Steven Bethard

      #3
      Re: Tutorial problem

      Rÿffffe9veillÿf fffe9 wrote:[color=blue]
      > 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.[/color]

      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

      Comment

      • Steve Holden

        #4
        Re: Tutorial problem

        Rÿffffe9veillÿf fffe9 wrote:
        [color=blue]
        > 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.
        >[/color]
        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

        Comment

        Working...