Horribly noobful string question

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

    #1

    Horribly noobful string question

    Hi Everyone,

    My first post here as I just begin to learn programming in general and
    python in particular. I have all the noobie confused questions, but as I
    work thru the tutorials I'm sure I'll find most my answers.

    This one is eluding me tho... I am working in the tutorials, writing scripts
    as presented and then modifying and expanding on my own to try to learn.
    I'm working with one that asks the user to 'guess a number I'm thinking',
    and with simple while loop, flow control and operands, returning an answer
    to guess again or you got it. I've added a 'playagain' function I've got
    working, but what I want is to stop the program from crashing when someone
    enters a string value instead of a int value. I know strings are immutable,
    and they can be changed to an int equivalent, but I just want the script to
    recognize the input as a string and print a simple "that's not a number, try
    again' type of message. I can't find the syntax to include in the
    if/elif/else block to include a line that says something like,

    elif guess == <string>
    print "that's not a number! please guess again!"

    I know that's not right, but can you see what I'm looking for and offer a
    suggestion?

    Thanks in advance all.


  • Fredrik Lundh

    #2
    Re: Horribly noobful string question

    "SeNTry" wrote:
    [color=blue]
    > My first post here as I just begin to learn programming in general and
    > python in particular. I have all the noobie confused questions, but as I
    > work thru the tutorials I'm sure I'll find most my answers.
    >
    > This one is eluding me tho... I am working in the tutorials, writing scripts
    > as presented and then modifying and expanding on my own to try to learn.
    > I'm working with one that asks the user to 'guess a number I'm thinking',
    > and with simple while loop, flow control and operands, returning an answer
    > to guess again or you got it. I've added a 'playagain' function I've got
    > working, but what I want is to stop the program from crashing when someone
    > enters a string value instead of a int value. I know strings are immutable,
    > and they can be changed to an int equivalent, but I just want the script to
    > recognize the input as a string and print a simple "that's not a number, try
    > again' type of message. I can't find the syntax to include in the
    > if/elif/else block to include a line that says something like,[/color]

    assuming you're using raw_input() to get the guess, you always
    have a string (in python's sense of that word).

    what you seem to want is to check if the string contains a number
    or not. here's one way to do this:

    guess = raw_input("make a guess: ")
    if guess == secret:
    print "congratulation s!"
    elif not guess.isdigit() :
    print "that's not a number! please guess again!"
    ...

    isdigit returns true if the string contains nothing but digits:
    [color=blue][color=green][color=darkred]
    >>> help(str.isdigi t)[/color][/color][/color]

    isdigit(...)
    S.isdigit() -> bool

    Return True if there are only digit characters in S,
    False otherwise.

    if you're using some other way to read user input, let us know.

    </F>



    Comment

    • Xavier Morel

      #3
      Re: Horribly noobful string question

      Fredrik Lundh wrote:[color=blue]
      > "SeNTry" wrote:
      >[color=green]
      >> My first post here as I just begin to learn programming in general and
      >> python in particular. I have all the noobie confused questions, but as I
      >> work thru the tutorials I'm sure I'll find most my answers.
      >>
      >> This one is eluding me tho... I am working in the tutorials, writing scripts
      >> as presented and then modifying and expanding on my own to try to learn.
      >> I'm working with one that asks the user to 'guess a number I'm thinking',
      >> and with simple while loop, flow control and operands, returning an answer
      >> to guess again or you got it. I've added a 'playagain' function I've got
      >> working, but what I want is to stop the program from crashing when someone
      >> enters a string value instead of a int value. I know strings are immutable,
      >> and they can be changed to an int equivalent, but I just want the script to
      >> recognize the input as a string and print a simple "that's not a number, try
      >> again' type of message. I can't find the syntax to include in the
      >> if/elif/else block to include a line that says something like,[/color]
      >
      > assuming you're using raw_input() to get the guess, you always
      > have a string (in python's sense of that word).
      >
      > what you seem to want is to check if the string contains a number
      > or not. here's one way to do this:
      >
      > guess = raw_input("make a guess: ")
      > if guess == secret:
      > print "congratulation s!"
      > elif not guess.isdigit() :
      > print "that's not a number! please guess again!"
      > ...
      >[/color]

      that, or just write something like

      guess = raw_input("Make your guess > ")
      try:
      if int(guess) == secret:
      # ok
      except ValueError:
      # no good

      Comment

      • SeNTry

        #4
        Re: Horribly noobful string question


        "Xavier Morel" <xavier.morel@m asklinn.net> wrote in message
        news:dnn2g8$l12 $1@aphrodite.gr ec.isp.9tel.net ...[color=blue]
        > Fredrik Lundh wrote:[color=green]
        >> "SeNTry" wrote:
        >>[color=darkred]
        >>> My first post here as I just begin to learn programming in general and
        >>> python in particular. I have all the noobie confused questions, but as
        >>> I
        >>> work thru the tutorials I'm sure I'll find most my answers.
        >>>
        >>> This one is eluding me tho... I am working in the tutorials, writing
        >>> scripts
        >>> as presented and then modifying and expanding on my own to try to learn.
        >>> I'm working with one that asks the user to 'guess a number I'm
        >>> thinking',
        >>> and with simple while loop, flow control and operands, returning an
        >>> answer
        >>> to guess again or you got it. I've added a 'playagain' function I've
        >>> got
        >>> working, but what I want is to stop the program from crashing when
        >>> someone
        >>> enters a string value instead of a int value. I know strings are
        >>> immutable,
        >>> and they can be changed to an int equivalent, but I just want the script
        >>> to
        >>> recognize the input as a string and print a simple "that's not a number,
        >>> try
        >>> again' type of message. I can't find the syntax to include in the
        >>> if/elif/else block to include a line that says something like,[/color]
        >>
        >> assuming you're using raw_input() to get the guess, you always
        >> have a string (in python's sense of that word).
        >>
        >> what you seem to want is to check if the string contains a number
        >> or not. here's one way to do this:
        >>
        >> guess = raw_input("make a guess: ")
        >> if guess == secret:
        >> print "congratulation s!"
        >> elif not guess.isdigit() :
        >> print "that's not a number! please guess again!"
        >> ...
        >>[/color]
        >
        > that, or just write something like
        >
        > guess = raw_input("Make your guess > ")
        > try:
        > if int(guess) == secret:
        > # ok
        > except ValueError:
        > # no good[/color]
        [color=blue][color=green]
        >>
        >> assuming you're using raw_input() to get the guess, you always
        >> have a string (in python's sense of that word).
        >>
        >> what you seem to want is to check if the string contains a number
        >> or not. here's one way to do this:
        >>
        >> guess = raw_input("make a guess: ")
        >> if guess == secret:
        >> print "congratulation s!"
        >> elif not guess.isdigit() :
        >> print "that's not a number! please guess again!"
        >> ...
        >>[/color]
        >
        > that, or just write something like
        >
        > guess = raw_input("Make your guess > ")
        > try:
        > if int(guess) == secret:
        > # ok
        > except ValueError:
        > # no good[/color]

        Sry for late reply, I've been out of town. Thanks for the responses, I'm
        just sitting down to try these out. I'm kind of surprised there's not a
        more obvious way to handle simply identifying strings.

        Anyways, here's the original code snippet from a tut. and then my modified
        effort. I was using input instead of raw_input. Looking at it now I'm not
        even sure why I did some of the stuff I did HAHA! I just made functions for
        convenience and practice. I'm sure it's laughable, but maybe you can see
        what I was doing and tell me what other errors I made just for learning...

        Everything seems to work well, except when the playagain function in my
        modified code gets a '2' input to quit, it prints 'aw, ok bye then' and then
        the next line is the print from the loopfunc if statement, "looping while
        statement now complete". If I remove the again="" line in the playagain
        function, it prints 2 times... wierd. I put this in there because I
        suspected that the variable was remaining and wanted to clear it at the
        start of the function, but I've now read that the variable in a function is
        destroyed when the function ends... is this right? My brain hurts...

        ORIGINAL
        number = 24
        guess = int(raw_input(' Enter an integer : '))

        if guess == number:
        print 'Congratulation s, you guessed it.' # New block starts here
        print "(but you do not win any prizes!)" # New block ends here
        elif guess < number:
        print 'No, it is a little higher than that' # Another block
        # You can do whatever you want in a block ...
        else:
        print 'No, it is a little lower than that'
        # you must have guess > number to reach here

        print 'Done'
        # This last statement is always executed, after the if statement is
        executed**MODIF IED**#define two functions first, then use them.def
        loopfunc(loopin g): while looping: guess= input("guess a number.
        see if you can guess what I'm thinking") if guess == number:
        print "you got it!" looping=False playagain("")
        print "looping while statement now complete" #for clarification when running
        elif guess < number: print "nope, a little higher!" else:
        print "no, a little lower!"def playagain(again ): again="" #removing
        this line make the 'looping while..' statement print 2 times again=
        input("would you like to play again? type '1' for yes and '2' for no") if
        again==1: print "great!" loopfunc(True) elif again==2:
        print "aww! Ok, bye then" return else: print "that's not a
        1 or a 2! Try again!" playagain("")nu mber=24loopfunc (True)


        Comment

        • SeNTry

          #5
          Re: Horribly noobful string question

          SRY, that last bit of code got messed up. Hopefully it will look right
          now...

          #define two functions first, then use them.

          def loopfunc(loopin g):
          while looping:
          guess= input("guess a number. see if you can guess what I'm thinking")
          if guess == number:
          print "you got it!"
          looping=False
          playagain("")
          print "looping while statement now complete"
          elif guess < number:
          print "nope, a little higher!"
          else:
          print "no, a little lower!"

          def playagain(again ):
          again=""
          again= input("would you like to play again? type '1' for yes and '2' for
          no")
          if again==1:
          print "great!"
          loopfunc(True)
          elif again==2:
          print "aww! Ok, bye then"
          return
          else:
          print "that's not a 1 or a 2! Try again!"
          playagain("")
          number=24
          loopfunc(True)
          [color=blue]
          >
          >[/color]


          Comment

          Working...