Python L oop пользовательский ввод, создать dict, сохранить текстовый файл - PullRequest
0 голосов
/ 03 мая 2020

Моя цель - взять два пользовательских ввода для al oop, сохранить их в словаре, а когда пользователь завершит l oop, чтобы сохранить словарь.

# ------ Global Variables -------

user_cont = True

# ------- Functions -------

def get_Product():
    while user_cont:

        # get product code
        get_ProductCode()

        # get product number
        get_ProductNum()

        # save to dict
        create_ProductDict()

        # ask to continue
        user_continue()

        # save dict to file

def get_ProductCode(): работает

def get_ProductNum(): работает

def user_continue(): работает, но теперь не запрашивается

Что я сейчас пытаюсь исправить:

# save to dictionary
def create_ProductDict(): 
   product_Dict = {}
   productCode = get_ProductCode()
   productNum = get_ProductNum()
   print(product_Dict)

Насколько я понимаю, для каждого l oop он должен получать возвращенные productCode и productNum и хранить их? Но теперь он не будет просить пользователя продолжить и завершить l oop, поэтому я могу просмотреть словарь, прежде чем попытаться его сохранить.

Кроме того, мне нужно, чтобы пользователь выбрал имя файла для данных.

Как всегда, помощь очень ценится!

Ответы [ 3 ]

0 голосов
/ 03 мая 2020

Попробуйте это:

def get_Product():
    user_cont = True
    while user_cont:
        get_ProductCode()
        get_ProductNum()
        create_ProductDict()
        user_cont = user_continue()

def user_continue():
    ip = input('Enter Yes to Continue: ').lower()
    return True if ip == 'yes' else False
0 голосов
/ 05 мая 2020

Вот моя законченная основная функция после того, как все вышеизложенное указало мне направление, в котором я нуждался, но не смог полностью ответить на мои вопросы. Моим ключевым выводом было обновление словаря до того, как я попросил продолжить, а затем добавление сохранения словаря в конце. (Дополнительные функции здесь не включены, так как не относятся к вопросу / решению. Спасибо!

    user_cont = True
    while user_cont:

        # get product code
        productCode = get_ProductCode()

        # get product number
        productNum = get_ProductNum()

        # print(productCode, productNum)

        # save to dict
        products[productCode] = productNum

        # debug to ensure dictionary was saving multi lines
        # print(products)

        # ask to continue
        user_cont = user_continue()

    for productCode, productNum in products.items():
        formproducts = (productCode + ", " + productNum)

        # print test
        # print(formproducts)

    # save dict to file
    FILENAME = input(str("Please enter a file name: "))
    file = open(FILENAME, "w")
    file.write( str(products) )
    file.close()
    print("File saved.")
0 голосов
/ 03 мая 2020

Здесь есть две проблемы. Первая проблема заключается в том, что ваш словарь уничтожается после завершения функции create_ProductDict (), поскольку словарь создается в области действия функции.

Один из способов обойти это - объявить словарь в глобальной область видимости как глобальная переменная. Таким образом, словарь будет сохраняться при добавлении в него большего количества элементов.

Далее, ваши входные переменные в настоящее время не используются и словарь не добавляется. Синтаксис этого следующий:

productDict[productCode] = productNumber

Таким образом, если предположить, что ваши входные функции эквивалентны функции python input (), решение, которое решает обе эти проблемы, будет выглядеть примерно так:

products = {}

def create_product_dict():
    code = input("Enter Code: ")
    num = input("Enter Number: ")
    products[code] = num 

create_product_dict()
create_product_dict()

print(products)

Вывод этого будет:

Enter Code: 123
Enter Number: 456
Enter Code: abc
Enter Number: 596
{'123': '456', 'abc': '596'}

Надеюсь, это полезно:)

...