Словарь Python становится пустым, как только функция, добавившая в него элементы, завершает выполнение - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь написать меню, в котором вариант 1 добавил бы пару ключ: значение в словарь, а вариант 2 запустил бы модуль потоков, используя элементы из словаря.Ключ - это сообщение от пользовательского ввода, а значение - это количество секунд от пользовательского ввода, которое поток должен приостановить перед отображением сообщения.

Сама по себе многопоточность сейчас не имеет значения.С чем я борюсь, так это с тем фактом, что когда я использую функцию для опции 1, она успешно добавляет пары ключ: значение в словарь (называемые messages_and_times).Но как только функция заканчивается, словарь снова становится пустым, как видно из функции для варианта 2, который обращается к нему.

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

    print(dict(messages_and_times))
    if not messages_and_times:
        print("This dictionary is empty.")
    else:
        print("This dictionary contains items.")

Однако, похоже, он тоже не работает правильно.Прежде всего, он печатает «Этот словарь содержит элементы».выглядит ли напечатанный словарь пустым или нет.Во-вторых, следующая часть моего кода (clear () используется для очистки дисплея терминала):

def create_dictionary():
    clear()
    answer = input(
        "Would you like to add another message? (yes/no)").lower()
    if answer == "yes":
        option_1()
    elif answer == "no":
        clear()
        print("You will now be returned to the main menu.")    

        print(dict(messages_and_times))       

печатает словарь, содержащий элементы, если я решил добавить их.Но если я добавлю строку

print(dict(messages_and_times))   

в саму main_menu (), вышеупомянутая функция create_dictionary () вместо этого напечатает пустой словарь.Только этот один оператор print () в main_menu () влияет на то, показывает ли create_dictionary () словарь с элементами в нем.

Может кто-нибудь помочь мне понять, как разработать код, в котором словарь сохраняетэлементы, созданные одной функцией, чтобы к ним могли обращаться другие функции?

Заранее благодарим вас за ваше время и помощь,

import os
clear = lambda: os.system('cls')

def main_menu ():

list_of_messages = []
list_of_times = []
messages_and_times = zip(list_of_messages, list_of_times)

def option_1():
    clear()
    list_of_messages.append(
        input("Please type in a message you would like to add to the list:"))
    clear()
    list_of_times.append(
        input("Please type in the time of delay for this message:"))

    def create_dictionary():
        clear()
        answer = input(
            "Would you like to add another message? (yes/no)").lower()
        if answer == "yes":
            option_1()
        elif answer == "no":
            clear()
            print("You will now be returned to the main menu.")    

            print(dict(messages_and_times))            
            if not messages_and_times:
                print("This dictionary is empty.")
            else:
                print("This dictionary contains items.")

            time.sleep(1.5)
            main_menu()
        else:
            clear()
            print("Please answer yes or no.")
            time.sleep(1.5)
            create_dictionary()
    create_dictionary()

def option_2():
    clear()

    print(dict(messages_and_times))
    if not messages_and_times:
        print("This dictionary is empty.")
    else:
        print("This dictionary contains items.")

    time.sleep(5)
    main_menu()


clear()
selection = 0
while selection == 0:
    print(("-" * 15) + "MAIN MENU" + ("-" * 15) + "\n")
    print("1: Input a message and a corresponding time of delay before its display.")
    print("2: Print your customized list of messages.")
    print("3: Generate a list of random messages with random delays.\n")

    selection = int(input(
        "Please select one of the options, by typing in the corresponding number:"))

    if selection == 1:
        option_1()
    elif selection == 2:
        option_2()                        
    elif selection == 3:
        clear()
        print("You've selected the third option.")
    else:
        clear()
        print("Please select from options 1 - 3.\n")
        time.sleep(1.5)
        main_menu()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...