[Tutor] trouble with "if"

adam urbas adamurbas at hotmail.com
Tue May 29 18:39:56 CEST 2007


The scary part is, I think I understand this.  I copied your last example and put it in IDLE and it doesn't like you code.  Never mind.  I figured it out.  So that is so it will notify you if your choice is invalid.  Nice lil tidbit of information there.  I'll be sure to use this.  Oh and while your here, I'd like to ask about loops I guess they are.  I want to have the program go back to the part where it asks for the user to select an option after it has run one of its if statements.Like, when the user tells it, "circle," then "radius," then enters the radius: here I would like the program to go back and ask the user if they want to do anything else, like find the area of a square, instead of the circle.  Would I have to tell python to print all those selections again, or would there be a way to just return to the beginning?Thanks,Au> Date: Sun, 27 May 2007 15:10:08 -0400> From: broek at cc.umanitoba.ca> To: adamurbas at hotmail.com> CC: tutor at python.org> Subject: Re: [Tutor] trouble with "if"> > adam urbas said unto the world upon 05/27/2007 01:49 PM:> > Thank you for the help Brian.  I would like to ask you about these> > things.  Which one of the examples you gave would be most fool> > proof.> > <snip of all previous exchanges which are too badly formatted to be > readable>> > > Hi Adam and all,> > Adam was asking about how to use raw_input to drive a basic command > prompt menu system. I'd tried to explain that raw_input returns > strings, so his if tests which were something like:> > choice = raw_input("Enter an option)> if choice == 1:>      do_option_1_stuff()> elif choice == 2:>      do_option_2_stuff()> > were not going to work, as choice will never be equal to an int.> > I'd sketched a few ways to deal with this, chiefly applying int() to > choice or comparing choice to '1', etc.> > That's more of less the gist of the above snippage and takes us more > or less up to the point where Adam asked his question above.> > I'm going to show you a few things that might be new to you, Adam. > Let's build up in steps.> > As a first pass, I would do the following:> > choice = int(raw_input("Please make your choice "))> > if choice == 1:>      # Option 1 code here>      print "In option 1"> > elif choice == 2:>      # Option 2 code here>      print "In option 2"> > # Carry on if-test as needed (or until you get to the point> # of learning about dictionary dispatch :-)> > That will be fine, until your user enters something silly:> >  >>>> Please make your choice I like bikes!> Traceback (most recent call last):>    File "/home/brian/docs/jotter/python_scraps/adamcode.py", line 1, > in <module>>      choice = int(raw_input("Please make your choice "))> ValueError: invalid literal for int() with base 10: 'I like bikes!'>  >>>> > That's no good!> > So, we can use Python's exception handling tools to make this a bit > better.> > > try:>      choice = int(raw_input("Please make your choice "))> except ValueError:>      print "Please make a choice from the options offered."> > > if choice == 1:>      print "In option 1"> > elif choice == 2:>      print "In option 2"> > > There is still a problem, though:> >  >>> # Make sure the previous value assigned to choice is gone.>  >>> del(choice)>  >>>> Please make your choice I like Bikes> Please make a choice from the options offered.> Traceback (most recent call last):>    File "/home/brian/docs/jotter/python_scraps/adamcode.py", line 7, > in <module>>      if choice == 1:> NameError: name 'choice' is not defined>  >>>> > We've printed the reminder to the user, but then have gone on to > compare the non-existent choice value to 1, and that doesn't work so > well. It isn't enough to make sure that choice isn't insane---we need > to make sure that there is a choice value at all.> > So, better still:> > > while True:>      try:>          choice = int(raw_input("Please make your choice "))>          # If the previous line worked, end the while loop. If it did>          # not work, we won't get here, so the loop will keep looping.>          break>      except ValueError:>          print "Please make a choice from the options offered."> > if choice == 1:>      print "In option 1"> > elif choice == 2:>      print "In option 2"> > > Now we get the following:> > Please make your choice I like bikes!> Please make a choice from the options offered.> Please make your choice Please take this> Please make a choice from the options offered.> Please make your choice1> In option 1>  >>>> > > There is still a problem, though:> > Please make your choice 42>  >>>> > Our sanity check has only insisted that the user enter a value that > can be turned into an int; nothing as yet makes it be one of the ints > we are expecting.> > So, try this:> > while True:>      try:>          choice = int(raw_input("Please make your choice "))>          if choice < 1 or choice > 2: # Adjust to suit options>              raise ValueError>          break>      except ValueError:>          print "Please make a choice from the options offered."> > if choice == 1:>      print "In option 1"> > elif choice == 2:>      print "In option 2"> > > Please make your choice I like bikes!> Please make a choice from the options offered.> Please make your choice 42> Please make a choice from the options offered.> Please make your choice 2> In option 2>  >>>> > > Now, all of this should be formatted to be a bit prettier---and > displaying the allowable options up front is a good idea, too---but > the essential ideas are there.> > There might be some parts of this that are new to you, so ask away if > you've gotten a bit lost.> > And, I'm no expert, so if someone else comes along and says `No, don't > do it like that', odds are they might be right. (Especially if their > name is Alan, Danny, or Kent ;-)> > Best,> > Brian vdB> 
_________________________________________________________________
Create the ultimate e-mail address book. Import your contacts to Windows Live Hotmail.
www.windowslive-hotmail.com/learnmore/managemail2.html?locale=en-us&ocid=TXT_TAGLM_HMWL_reten_impcont_0507
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/tutor/attachments/20070529/165e34fa/attachment.html 


More information about the Tutor mailing list