简体   繁体   中英

passing this dictionary in the function

I need to somehow access the class dictionary and delete it with the removeClass() function, not sure how to pass the class in it though. This program is supposed to remove the class from the dictionary when the number 2 option is selected.

I'm not sure what to do here.

def prompt():
    print('MENU')
    print('1 --> Add classes.')
    print('2 --> Remove classes.')
    print('3 --> View course details.')
    print('4 --> View schedule.')
    print('5 --> Quit.')
    option = int(input('What would you like to choose? '))
    while option < 1 or option > 5:
        option = int(input('Please enter a valid numerical option: '))
    return option

def checkOption(option):
    if option == 1:
        courseCount = 0
        courseCount = courseCounter()
        classes = addClasses(courseCount)
    elif option == 2:
        removeClasses(courses)
    elif option == 3:
        viewCourseDetails()
    elif option == 4:
        viewSchedule()


def courseCounter():
    courseCount = input('Enter a numerical value of courses only (up to 4): ')
    while courseCount.isnumeric() == False:
          courseCount = input('Enter a NUMERICAL value of courses only (up to 4): ')
    return int(courseCount)

def addClasses(courseCount):
    classes = {}
    i = 1
    while i <= courseCount:
        courseName = input('Enter a course name: ')
        classes[courseName] = {}
        classes[courseName]['Room Number'] = input('Enter a room number: ')
        classes[courseName]['Instructor'] = input('Enter a instructor: ')
        classes[courseName]['Meeting time'] = input('Enter a meeting time: ')
        i = i + 1
    return classes

def removeClasses(*****):
    courseName = input('Enter the class you would like to remove: ')
    if ***** in classes:
        del classes[courseName]
    print(classes)



def main():
    option = prompt()
    checkOption(option)
    while option > 1 or option < 5:
        if option == 5:
            break
        option = prompt()
        checkOption(option)
main()

Through globals() variables so you can pass it across functions:

def prompt():
    print('MENU')
    print('1 --> Add classes.')
    print('2 --> Remove classes.')
    print('3 --> View course details.')
    print('4 --> View schedule.')
    print('5 --> Quit.')
    option = int(input('What would you like to choose? '))
    while option < 1 or option > 5:
        option = int(input('Please enter a valid numerical option: '))
    return option

def checkOption(option):
    if option == 1:
        courseCount = 0
        courseCount = courseCounter()
        classes = addClasses(courseCount)
    elif option == 2 :
        if 'classes' in globals() :
            removeClasses(globals()['classes'])
        else :
            print("Insert a class before!")
            checkOption(1)
    elif option == 3:
        viewCourseDetails()
    elif option == 4:
        viewSchedule()

def courseCounter():
    courseCount = input('Enter a numerical value of courses only (up to 4): ')
    while courseCount.isnumeric() == False:
          courseCount = input('Enter a NUMERICAL value of courses only (up to 4): ')
    return int(courseCount)

def addClasses(courseCount):
    classes = {}
    i = 1
    while i <= courseCount:
        courseName = input('Enter a course name: ')
        classes[courseName] = {}
        classes[courseName]['Room Number'] = input('Enter a room number: ')
        classes[courseName]['Instructor'] = input('Enter a instructor: ')
        classes[courseName]['Meeting time'] = input('Enter a meeting time: ')
        i = i + 1
    globals()[ 'classes' ] = classes
    return classes

def removeClasses(classes):
    courseName = input('Enter the class you would like to remove: ')
    if courseName in classes:
        del classes[courseName]
    print(classes)



def main():
    option = prompt()
    checkOption(option)
    while option > 1 or option < 5:
        if option == 5:
            break
        option = prompt()
        checkOption(option)
main()

This works on my machine. This also check for existence of classes or redirect user to define classes.

Be awared of globals() behave (eg Why are global variables evil? ). Otherwise you can define an object (an empty dictionary) and pass it through functions, filling it or check if is empty, that is probably safer.

The simplest way I can think of is as follows. I modified 2 of your functions and made 'classes' global.

classes = {}


def checkOption(option):
    global classes
    if option == 1:
        courseCount = courseCounter()
        classes = addClasses(courseCount)
    elif option == 2:
        removeClasses()
    elif option == 3:
        viewCourseDetails()
    elif option == 4:
        viewSchedule()


def removeClasses():
    courseName = input('Enter the class you would like to remove: ')
    if courseName in classes:
        del classes[courseName]
    print(classes)

I hope this helps you.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM