передавая этот словарь в функции - PullRequest
0 голосов
/ 27 марта 2019

Мне нужно как-то получить доступ к словарю классов и удалить его с помощью функции removeClass (), хотя я не уверен, как передать класс в нем.Предполагается, что эта программа удалит класс из словаря, если выбрана опция номер 2.

Я не уверен, что здесь делать.

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()

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Самый простой способ, который я могу придумать, заключается в следующем.Я изменил две ваши функции и сделал глобальные «классы».

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)

Надеюсь, это поможет вам.

0 голосов
/ 27 марта 2019

Через переменные globals (), чтобы вы могли передавать их через функции:

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()

Это работает на моей машине. Это также проверяет наличие классов или перенаправляет пользователя для определения классов.

Остерегайтесь глобальных () поведения (например, Почему глобальные переменные являются злыми? ). В противном случае вы можете определить объект (пустой словарь) и передать его через функции, заполнив его или проверив, является ли он пустым, что, вероятно, безопаснее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...