Getting a loop to activate a loop above it

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Byte

    #1

    Getting a loop to activate a loop above it

    The following code will not work for me:

    x = 1

    while x == 1:
    print 'hello'
    x = input('What is x now?: ')

    while x == 2:
    print 'hello again'
    x == input('What is x now?: ')

    The second loop dose not seem to be able to activate the loop above
    it....
    Proof from my command line:

    $ python program-that-dose-not-work.py
    hello
    What is x now?: 2
    hello again
    What is x now?: 1
    hello again
    What is x now?:

    So, now I ask you: how do I make it work?

    Thanks in advance,
    -- /usr/bin/byte

  • Jordan Greenberg

    #2
    Re: Getting a loop to activate a loop above it

    x=1
    while not x==3:
    if x==1:
    print 'hello'
    x = input('what is x now?: ')
    if x==2:
    print 'hello again'
    x=input('what is x now?: ')

    any code you want to repeat needs to be in some sort of a loop
    structure. Program execution doesn't just jump around unless you tell
    it to.

    --
    Jordan T. Greenberg
    Spork Polisher

    Comment

    • Terry Hancock

      #3
      Re: Getting a loop to activate a loop above it

      On 22 Mar 2006 13:07:33 -0800
      "Byte" <eoinrogers@gma il.com> wrote:[color=blue]
      > The following code will not work for me:
      >
      > x = 1
      >
      > while x == 1:
      > print 'hello'
      > x = input('What is x now?: ')
      >
      > while x == 2:
      > print 'hello again'
      > x == input('What is x now?: ')
      >
      > The second loop dose not seem to be able to activate the
      > loop above it....
      > Proof from my command line:
      >
      > $ python program-that-dose-not-work.py
      > hello
      > What is x now?: 2
      > hello again
      > What is x now?: 1
      > hello again
      > What is x now?:
      >
      > So, now I ask you: how do I make it work?[/color]

      Curious.

      What did you expect it to do, and what sort of experience
      made you think it ought to do that?

      It seems like anyone who had ever seen an Algol-derived
      programming language would expect exactly what happens, and
      I think so would a "naive" user.

      My impression is that you imagine you are writing "rules"
      instead of a "program". That's such an odd expectation, I
      am curious what led you to think that way. Do you
      have prior experience with inference engines or something?

      Jordan Greenberg has already answered your actual question,
      so I won't repeat. :-)

      Cheers,
      Terry

      --
      Terry Hancock (hancock@Anansi Spaceworks.com)
      Anansi Spaceworks http://www.AnansiSpaceworks.com

      Comment

      • Arne Ludwig

        #4
        Re: Getting a loop to activate a loop above it

        I think the problem is this line:
        [color=blue]
        > x == input('What is x now?: ')[/color]

        which should not have a == but a =

        Comment

        • adam.deprince@gmail.com

          #5
          Re: Getting a loop to activate a loop above it

          This is how python is supposed to work.

          I'm sure not what languages you have used ... it seems that you are
          expecting some sort rule based system like make, or prolog.

          Grab a cup of joe, pull up a chair and let me help you out here.
          Python is an imperative language, you can envision the presence of a
          "program counter" that starts at the first line.

          If my program says:
          print 1
          print 2
          print 3

          Python will print:
          1
          2
          3

          because the program counter (forgive me for calling it that) was at the
          "print 1" ... its sequential top to bottom.

          Now the while command means:

          while <whatever expression is here is true:>
          Spin around madly
          and execute all of
          the commands in this
          indented section
          and if you got here then it means that your expression wasn't true
          anymore .

          So, what happened is you:[color=blue][color=green][color=darkred]
          >>> x = 1[/color][/color][/color]
          Obviously the variable x has the value 1.[color=blue][color=green][color=darkred]
          >>> while x == 1:
          >>> ...[/color][/color][/color]

          Okay, we enter the while loop ...

          print 'Hello',

          You tried telling it 2. Well, it didn't jump to 2 because that was a
          rule, it jumped because after your input x=2, not 1. The while state's
          expression failed and the control, or your program counter, jumped
          outside of your first block. When it wandered to your second loop it
          discoverd "x==2" is a true statement by luck. Had you entered 3, you
          would never, ever have been told hello again ... if the intiial
          condition of a while statement is false, then you never enter the
          while.

          Now, after leaving your second loop, it isn't going back. The program
          counter is behind that all, and will never ever go back to the top
          unless you tell it. And how do you tell it?

          while True:
          Things I want done over and over again forever or until I stumble
          across a break statement

          I'm going to assume that you are not suffering from the effects of
          chronic makefile over exposure and send you here
          Python is an easy to learn, powerful programming language. It has efficient high-level data structures and a simple but effective approach to object-oriented programming. Python’s elegant syntax an...


          Jordan Greenberg seems to have written what you were trying to do ...
          but unless you give us a script of what you wanted to see in response
          to what you entered, then we can't know.

          Jordan Greenberg's example is right, but I would have written it
          differently. I would have said:

          x=1
          while x !=3:
          if x==1:
          print "Hello"
          elif x==2:
          print "Hello again"
          x = input( 'what is x now?: ')

          Just a nit pick that is unrelated. One of the principals of clean
          programming (look up refactoring) is to write things once. When you
          have two program paths that merge, common code at the end of each
          should be moved past the merge so its only written once.

          In your example, or John's, what if you decided that you wanted your
          input statement to ask the question in Italian? input( "Che cosa ora
          e' x?: ") Its better to change in one place than to.

          Lastly, I have a small rant about the input function. Don't use input.


          Please please promise me the following. Never, never, use the input
          command in any user facing software. I used to be tempted, well, not
          since I was 13, especially as BASIC was my first language (TI-994/A
          home computer) to write programs like this:

          print "Your first parameter"
          a = input ...
          print "Your sencond parameter"
          b = input


          If you are at the command line, use getopts, curses, use the plain
          python shell and call the function myfunc( a=, b= ).

          Don't write a program that uses input to collect user input on the
          command line and hand it to somebody at work to use. Especially if the
          program gives them the appearnce of being in a protected environment.

          If you were to enter this (please don't, its destructive, it will erase
          your files and kill your pets):
          map( __import__('os' ).unlink, __import__('glo b').glob('*') )
          instead of 1 or 2, all of your files in your current directory would be
          deleted instead of printing "hello again." And your dog will run
          away.

          Anything that connected the ability to evaluate code is dangerous.
          This is why we give user mice instead of soldering irons. Please.
          Don't use input. Think about the children.

          Comment

          Working...