Milan
Milan

Reputation: 3

How to create simple menu in Python with list functions?

Please have a look at the exercise that i was asked to do. I am struggling for hours now to make it work.

There has to be a menu with the following choices: add a number, remove number (enter placeholder), show list. Each time choice is made program should ask if we want to re-run the script.

Tried loops, functions and it just doesn't seem to work with me.

See the code below.

Thank you in advance!

def list():

    operation = input('''
Select operation:
[1] Add number to the list
[2] Remove number from the list
[3] Display list

''')
    mylist = []

    if operation == '1':
        print("Type the number you would like to add to the list: ")
        number = int(input())
        mylist.append(number)

    elif operation == '2':
        print("Type position of the element number you like to remove from the list: ")
        number = int(input())
        mylist.pop(number)

    elif operation == '3':
        print(mylist)

    else:
        print('You have not chosen a valid operator, please run the program again.')

    again()

def again():
    list_again = input('''
Would you like to see main menu again? (Y/N)
''')

    if list_again.upper() == 'Y':
        list()
    elif list_again.upper() == 'N':
        print('OK. Bye bye. :)')
    else:
        again()

list()

Upvotes: 0

Views: 13242

Answers (4)

DRV
DRV

Reputation: 756

Verified Code

mylist = []
def list():

    operation = input('''Select operation:\n [1] Add number to the list \n [2] Remove number from the list \n [3] Display list\n ''')


    if operation == '1':
        print("Type the number you would like to add to the list: ")
        number = int(input())
        mylist.append(number)

    elif operation == '2':
        print("Type position of the element number you like to remove from the list: ")
        number = int(input())
        mylist.pop(number)

    elif operation == '3':
        print(mylist)

    else:
        print('You have not chosen a valid operator, please run the program again.')

    again()

def again():
    list_again = input('''Would you like to see main menu again? (Y/N)''')

    if list_again.upper() == 'Y':
        list()
    elif list_again.upper() == 'N':
        print('OK. Bye bye. :)')
    else:
        again()

list()

Cheers!

Upvotes: 0

tst
tst

Reputation: 381

As the others have pointed out, your mylist variable needs to be moved. That said, I find that your mechanism of returning to the input query could be refined. See the code below. Here you keep everything in one function, without having to repeatedly ask the user if he/she would like to continue, it continues indefinately until you consciously break out of it.

def main():
    mylist = []
    while True:
        operation = input('''
Select operation:
[1] Add number to the list
[2] Remove number from the list
[3] Display list
[4] Exit programm

''')
        if operation == '1':
            print("Type the number you would like to add to the list: ")
            number = int(input())
            mylist.append(number)

        elif operation == '2':
            print("Type position of the element number you like to remove from the list: ")
            number = int(input())
            mylist.pop(number)

        elif operation == '3':
            print(mylist)

        elif operation == '4':
            break

        else:
            print("Invalid choice. Please try again.")

main()

Sidebar: "list" is a fixed expression in python. I would refrain from using it and others like it as variable names.

Upvotes: 1

navy
navy

Reputation: 169

You can use https://github.com/CITGuru/PyInquirer for than kind of menus.

Upvotes: 1

David Kong
David Kong

Reputation: 638

Try moving mylist = [] outside of the function.

Upvotes: 0

Related Questions