[Tutor] double ended queue

Martin A. Brown martin at linux-ip.net
Sat Nov 4 21:31:04 EDT 2017


Hello and welcome duplicative Atux,

>i am new to the area and i am struggling with a small project that i have.
>i need some help please.

New to Python, perhaps.  New to programming, as well?

>i need to create a program that runs constantly unless the user 
>presses q to end it.

This is a good way to learn how to handle loops which can handle 
various conditions.  I mention below a module called cmd, which 
ships as a part of the Python library, but it may be good to 
understand first how to handle the looping constructs before you 
move on to the cmd module.

Consider a loop like you indicated:

>while True:
>    if input("\n\n\nType  a number to add it to the queue or q to exit: ") == 'q':
>        break

There are quite a few valuable lessons in this simple task.

  * consider the what kind of data you are asking for; is it an 
    integer, a string or a floating point value?  Alan mentioned 
    that in his message
  * be careful with the kind of data your user is entering, but it 
    also teaches you the value of knowing what the data type is (an 
    important lesson in most programming languages)
  * how do you loop successfully and how do you break out of the 
    loop; you'll want to know about 'break' and you might find 
    'continue' useful, as well

------------------------------- 
# -- Python3
queue = list()
status = ''
instructions = "\n\nAdd a number to the queue or q to exit: "

while True:

    # -- convert the string inputs to int(), float() or whatever type you want
    #    the program to operate on
    #
    response = input(status + instructions)
    response = response.lower()  # -- lower case the string
    if response == 'q':
        break

    #
    try:
        number = int(response)  # -- or float(response)
    except ValueError:
        status = "Ignoring non-integer input: " + response
        continue

    queue.append(response)
    status = "queue = " + str(queue)
------------------------------- 

>the program asks the user for a number and puts the number in a 
>queue, then it prints the queue with the new element at the end.if 
>the number is with 01,02 then it will be added at the left hand 
>side without the 0 at the beginning, otherwise at the right hand 
>side.

Steven has demonstrated how you could use the list() data structure 
to do what you describe.  Note that Python comes with additional 
data structures and what you describe is known in Python as a deque.  
It's a bit less common of a data structure, so you could benefit 
from learning how to perform the prepend and append operations like 
Steven has suggested.

If you haven't noticed that you can run the Python interpreter 
directly, you may find this helpful simply to play with the data 
structures.

You can use a list() as you can see in the core documentation (and 
as Stephen mentioned), however, even in the main documentation is a 
pointer to the collections.deque, which is a more specific sort of 
data structure geared for exactly the use case you present.

Important note;  If humans are interacting with this, though, it's 
unlikely that any of the efficiency gains of a deque over a list are 
necessary, but here are links to the documentation:

  https://docs.python.org/3/tutorial/datastructures.html#using-lists-as-queues
  https://docs.python.org/3/library/collections.html#collections.deque

>the user can remove an item from the end of the queue by typing r. 
>if the user types '0r' it will be removed from the beginning of the 
>queue.

Once you have the addition of items to the queue and the looping 
worked out to your satisfaction, maybe you could share your progress 
and there might be somebody to provide a bit more help on the next 
step of your learning

>but i a stuck on how to continue asking and adding to the list

Good luck,

-Martin

-- 
Martin A. Brown
http://linux-ip.net/


More information about the Tutor mailing list