Пользовательский ввод в Python, после ложного утверждения и вызова функции для принудительного ввода правильной записи, истинный оператор не делает то, что должен делать - PullRequest
0 голосов
/ 19 ноября 2018

Это мой второй вопрос здесь, в группе, я действительно пытался найти ответ везде, возможно, я искал неверные термины.Я совершенно новый в Python.Пожалуйста, сообщите мне, если ответ доступен в вашем сообществе или где-либо еще, и я удалю этот пост.Спасибо.

Итак, я делаю онлайн-курс по Python, и в задании мне нужно создать базу данных для магазина фильмов, поэтому мне нужно создавать меню и действия, такие как, просмотр списка фильмов,добавить фильм, найти фильм, удалить фильм и т. д. ...

Я застрял в процессе добавления фильма, то есть когда я прошу пользователя ввести правильный «год фильма» вформат '2018' и правильная категория (это словарь) ...

Проблема в том, что если пользователи правильно выполняют свою работу с самого начала, все прекрасно работает, то есть истинные утверждения в IF иTry (кроме) работает отлично, но когда пользователи вводят неправильный формат в «годе фильма» или другой номер для категории в фильме категории, операторы IF и Try (Except) FALSE работают и заставляют пользователей вставлять своиответьте еще раз, однако, новые операторы TRUE не выполняют то, что должны делать, то есть «возвращают» (фиксируют) введенные пользователем данные, вместо этого они возвращают «None».

Пожалуйста,помогите мне с этим.

Спасибо.

Кстати, я пишу в PyCharm, если это имеет значение.Приветствия.

Задание 1 - База данных для магазина фильмов

def save_dict_to_file(dic):
    f = open('dict.txt', 'w')
    f.write(str(dic))
    f.close()


def load_dict_from_file():
    f = open('dict.txt', 'r')
    data = f.read()
    f.close()
    return eval(data)


def open_or_loading():

    print('\n\nHello to Movies.base\n\n'
          'Do you want to load an existent database or create a new one?\n\n'
          'Choose 1 for loading an existent.\n'
          'Choose 2 for create a new database.\n')
    user_answer = input('Option: ')

    if user_answer == '1':
        database = load_dict_from_file()

    elif user_answer == '2':
        database = {}
        save_dict_to_file(database)
    else:
        print('Wrong option, try again.\n')
        open_or_loading()


    def view_all_list():
        for key, value in database.items():
            print(key, value)



    def add_movie():

        last_inserted = (len(database))
        movie_name = input('What is the name of the movie: ')

        def year_movie():
            try:
                movie_year = int(input('Released in year: '))
            except:
                print('You must insert a year format: e.g.: 2018')
                year_movie()
            else:
                if movie_year < 1000 or movie_year > 9999:
                    print('You must insert a year format: e.g.: 2018')
                    year_movie()
                else:
                    return movie_year
        movie_year = year_movie()
        movie_director = input('Directed by: ')

        def category_movie():

            print('Choose one category:\n\n'
                  '1 - Action\n'
                  '2 - Adventure\n'
                  '3 - Avant-garde / Experimental\n'
                  '4 - Comedy\n'
                  '5 - Comedy-Drama\n'
                  '6 - Crime\n'
                  '7 - Drama\n'
                  '8 - Epic\n'
                  '9 - Family-Children\n'
                  '10 - Fantasy\n'
                  '11 - Historical-Film\n'
                  '12 - Horror\n'
                  '13 - Musical\n'
                  '14 - Mystery\n'
                  '15 - Romance\n'
                  '16 - Sci-Fi / Science-Fiction\n'
                  '17 - Spy Film\n'
                  '18 - Thriller\n'
                  '19 - War\n'
                  '20 - Western\n'
                  '21 - Adult\n')

            category = int(input('Category: '))

            def switch_demo(argument):
                switcher = {
                    1: 'Action',
                    2: 'Adventure',
                    3: 'Avant-garde / Experimental',
                    4: 'Comedy',
                    5: 'Comedy-Drama',
                    6: 'Crime',
                    7: 'Drama',
                    8: 'Epic',
                    9: 'Family-Children',
                    10: 'Fantasy',
                    11: 'Historical-Film',
                    12: 'Horror',
                    13: 'Musical',
                    14: 'Mystery',
                    15: 'Romance',
                    16: 'Sci-Fi / Science-Fiction',
                    17: 'Spy Film',
                    18: 'Thriller',
                    19: 'War',
                    20: 'Western',
                    21: 'Adult'
                }
                return switcher.get(category)

            if category < 1 or category > 21:
                print('\nInvalid Category\n')
                category_movie()
                switch_demo(category)

            else:
                return switch_demo(category)

        movie_category = category_movie()

        database[last_inserted + 1] = {}
        database[last_inserted + 1]['Movie Name'] = movie_name.upper()
        database[last_inserted + 1]['Movie Year'] = movie_year
        database[last_inserted + 1]['Director Name'] = movie_director.upper()
        database[last_inserted + 1]['Movie Category'] = movie_category

        save_dict_to_file(database)

        print(f'\nMovie {movie_name} added to database\n')

        menu_initial()


    def menu_initial():
        print('\n\nChose one option:\n\n'
              'Select 1 to view the movies list.\n'
              'Select 2 to add a new movie.\n'
              'Select 3 to find a movie.\n'
              'Select 4 to delete a movie.\n'
              'Select 5 to exit out\n')
        user_selection = (input('Option: '))

        if user_selection == '1':
            view_all_list()
            menu_initial()
        elif user_selection == '2':
            add_movie()
            menu_initial()
        elif user_selection == '3':
            print('Finding')
            menu_initial()
        elif user_selection == '4':
            print('deleting')
            menu_initial()
        elif user_selection == '5':
            print('Thanks for using Movie.Base. Bye-bye!')
            exit()
        else:
            print('Option do not exist')
            menu_initial()

    menu_initial()

open_or_loading()

1 Ответ

0 голосов
/ 19 ноября 2018

В методе year_movie вам нужно что-то всегда возвращать, иначе вы получите None.Вы вызываете этот метод рекурсивно, когда ошибка неверна, но вы не возвращаете значение.Попробуйте добавить ключевое слово return в рекурсивные вызовы:

    def year_movie():
        try:
            movie_year = int(input('Released in year: '))
        except:
            print('You must insert a year format: e.g.: 2018')
            return year_movie() ## return from recursive call
        else:
            if movie_year < 1000 or movie_year > 9999:
                print('You must insert a year format: e.g.: 2018')
                return year_movie() ## return from recursive call
            else:
                return movie_year

Также в category_movie():

        if category < 1 or category > 21:
            print('\nInvalid Category\n')
            category = category_movie()  # <-- Assign this value
            switch_demo(category)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...