loops

Discussion in 'Python' started by Verde Denim, Dec 2, 2012.

  1. Verde Denim

    Verde Denim Guest

    I'm just getting into py coding, and have come across an oddity in a py
    book - while loops that don't work as expected...

    import random

    MIN = 1
    MAX = 6

    def main():
    again = 'y'

    while again == 'y':
    print('Rolling...')
    print('Values are: ')
    print(random.randint(MIN, MAX))
    print(random.randint(MIN, MAX))

    again = input('Roll again? (y = yes): ')

    main()

    Produces -
    python dice_roll.py
    Rolling...
    Values are:
    5
    4
    Roll again? (y = yes): y
    Traceback (most recent call last):
    File "dice_roll.py", line 17, in <module>
    main()
    File "dice_roll.py", line 15, in main
    again = input('Roll again? (y = yes): ')
    File "<string>", line 1, in <module>
    NameError: name 'y' is not defined

    This same loop structure appears in many places in this book "Starting
    out with Python, 2nd ed, Tony Gaddis), and they all yield the same
    error. Is there something I'm missing here?

    Thanks for the input...
     
    Verde Denim, Dec 2, 2012
    #1
    1. Advertising

  2. On Sun, 02 Dec 2012 16:39:07 -0500, Verde Denim wrote:

    > I'm just getting into py coding, and have come across an oddity in a py
    > book - while loops that don't work as expected...


    This error has nothing to do with the while loop. Read the error message
    that Python gives you:

    > Traceback (most recent call last):
    > File "dice_roll.py", line 17, in <module>
    > main()
    > File "dice_roll.py", line 15, in main
    > again = input('Roll again? (y = yes): ')
    > File "<string>", line 1, in <module>
    > NameError: name 'y' is not defined



    In Python 2, there is a serious design flaw with the "input" function,
    fortunately corrected in Python 3. The flaw is that input automatically
    evaluates whatever you type as Python code. So when you type "y", the
    input function tries to evaluate the name y, which doesn't exist.

    No while loop required:

    py> again = input('Roll again? (y = yes): ')
    Roll again? (y = yes): y
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "<string>", line 1, in <module>
    NameError: name 'y' is not defined


    The solution is either to use Python 3, where this is no longer an issue,
    or to replace "input" with "raw_input":

    py> again = raw_input('Roll again? (y = yes): ')
    Roll again? (y = yes): y
    py> again
    'y'




    > This same loop structure appears in many places in this book "Starting
    > out with Python, 2nd ed, Tony Gaddis), and they all yield the same
    > error. Is there something I'm missing here?
    >
    > Thanks for the input...


    I see what you did there... *wink*



    --
    Steven
     
    Steven D'Aprano, Dec 2, 2012
    #2
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. eismaus4

    to many FOR loops?

    eismaus4, Apr 27, 2004, in forum: VHDL
    Replies:
    1
    Views:
    692
  2. Jeremy Morton

    Perl loops should use break, not last

    Jeremy Morton, Jan 29, 2005, in forum: Perl
    Replies:
    1
    Views:
    5,162
    Big and Blue
    Jan 30, 2005
  3. Multiple For Loops?

    , Feb 22, 2006, in forum: VHDL
    Replies:
    1
    Views:
    479
    john Doef
    Feb 22, 2006
  4. =?Utf-8?B?Um9iIE8nQ29w?=

    RedirectFromLoginPage and loops

    =?Utf-8?B?Um9iIE8nQ29w?=, Oct 25, 2004, in forum: ASP .Net
    Replies:
    2
    Views:
    415
    =?Utf-8?B?Um9iIE8nQ29w?=
    Oct 25, 2004
  5. Me
    Replies:
    2
    Views:
    254
Loading...

Share This Page