Как я могу использовать цикл while для запуска нескольких функций в python - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть две функции: одна проверяет, хотите ли вы добавить какие-либо элементы в словарь, а затем проверяет значение этого элемента и сохраняет эти данные в файл.Если вы закончили добавлять новые элементы в словарь, он переходит к следующей функции, которая проверяет, хотите ли вы изменить значение любых существующих в данный момент элементов.Если все хорошо, вы можете дать команду программе выйти.

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

Я заставил программу работать должным образом, используя цикл без циклов.Но кто-то сказал мне, что это неряшливо.Также я заставил это работать, когда я построил функции в цикле while, но они сказали мне, что это тоже было неаккуратно.Поэтому я пытаюсь сделать цикл while после того, как функции построены, и вызвать функции внутри него.Заранее спасибо и, надеюсь, мой вопрос понятен.

    # current dictionary 
    itemNames = {}

    # checks if you want to add to your dictionary
    def addToDictionary():      
        checkIF_newItems = raw_input("Add new item? 'YES' or 'NO' \n ").upper()
        if checkIF_newItems.startswith("Y"):
            newItems = raw_input("What type of item would you like to add today? \n")
            newItems_Name = raw_input("What is the value of your new item? \n")
            itemNames[newItems] = newItems_Name
            return True
        elif 'PRINT' in checkIF_newItems:
            print "These are your current items. \n\n"
            return True
        elif checkIF_newItems.startswith("N"):
            print("OKAY")
            exit()
        elif 'Exit' in checkIF_newItems:
            exit()  

    # checks if you want to edit your current dictionary
    def check_forChanges():
        #checks user intent and if YES prints current keys
        checkIf = raw_input("Change item value? 'YES' 'NO' 'EXIT' 'ADD' 'PRINT' \n").upper()
        print("\n")

        if checkIf.startswith("Y"):
            for i in itemNames.keys():
                print i
            print("\n") 
            #finds what key to access and ask for its new value
            itemChoice = raw_input("what item would you like to change the value of? \n")
            return True

            if itemChoice in itemNames.keys():
                newName = raw_input("What is the new value? \n")
                itemNames[itemChoice] = newName
                print("You've changed your " + itemChoice + "'s value to " + newName + ".")
                return True
            print('\n')
            return True 

        #if NO then checks to exit
        elif checkIf.startswith("N"):
            CLOSE = raw_input("OKAY then, would you like to exit? ").upper()

            if CLOSE.startswith('Y'):
                exit()
                return False

            elif EXIT.startswith('N'):
                check_forChanges()

            elif EXIT is 'print':
                for i in itemNames:
                    print i 
                    return True

        # goes back to first function
        elif 'ADD' in checkIf:
            addToDictionary()
            return True

        #prints current values
        elif 'PRINT' in checkIf:
            for i in itemNames.values():
                print i 
                return True

        elif 'EXIT' in checkIf:
            exit()
            return False

    # main routine
    validIntro = False
    while not validIntro:
        addToDictionary()
        if addToDictionary() == False:
            continue
        else:
            exit()
        check_forChanges()
        if check_forChanges() == False:
            break
        else:
            continue

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

1 Ответ

0 голосов
/ 01 февраля 2019

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

Звучит так, будто вы хотите продолжать добавлять в словарь, пока пользователь не скажет "больше нечего добавить », а затем проверяет значения, пока пользователь не выйдет.Это будет выглядеть примерно так:

while addToDictionary(): pass
while check_forChanges(): pass

Вам придется изменить существующие функции на False, когда текущее действие будет завершено, и на sys.exit(), когда пользователь попросит выйти.Хотя я не думаю, что вам нужно просить о выходе - если они не хотят добавлять или проверять, тогда они сделаны, и циклы завершены.

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

keep_looping = True
while keep_looping:
    while addToDictionary(): pass
    while check_forChanges(): pass
    keep_looping = askToContinue()
...