Как поместить это в цикл

Мне нужно поместить этот код в цикл, чтобы вы могли сначала выбрать любое число и вернуться к началу после того, какое вы выберете, но все, что я пробовал, не сработало, и мне нужна помощь.

peoples = {
"Mary": {
    "name": "Mary",
    "budget": 100,
    "items": {
        "Game": 0,
        "Book": 0,
        "Kindle": 0
    },
    "status": "incomplete"
},
"Steve": {
    "name": "Steve",
    "budget": 100,
    "items": {
        "Tie": 0,
        "Scarf": 0,
        "Amazon Echo": 0
    },
    "status": "incomplete"
},
"Kevin": {
    "name": "Kevin",
    "budget": 65,
    "items": {
        "Mario Kart": 0
    },
    "status": "incomplete"
},
"Jane": {
    "name": "Jane",
    "budget": 50,
    "items": {
        "Gift Card": 0,
        "Gloves": 0
    },
    "status": "incomplete"
},
"Chris": {
    "name": "Chris",
    "budget": 100,
    "items": {
        "Chocolates": 0,
        "Galaxy Tab": 0
    },
    "status": "incomplete"
}
}

print("""
Menu
--------------------
1. Update Shopping List
2. Complete Shopping List
3. Display Shopping List
4. Exit Application
--------------------
Make your selection

""")

option = int(input("Enter an option: "))

if option == 1:
    people = input("Who are you updating?: ")
    print("\nCurrent values of people",people)
    print(peoples[people])
    print("\nAvailable items and their prices are:")
    for item in peoples[people]["items"]:
        print(item, peoples[people]["items"][item])
    item_to_update = input("Enter an item to update: ")
    price = int(input("Enter updated price: "))
    budget = peoples[people]["budget"] - peoples[people]["items"] 
[item_to_update] - price
peoples[people]["items"][item_to_update] = price
peoples[people]["budget"] = budget
print("\nUpdated values of people",people)
print(peoples[people])

option = int(input("\nEnter an option: "))

if option == 2:
    update = input("Choose one of the 5 people to complete their shopping list: ")
if update in peoples:
        print("You have chosen",update)
answer = input("Do you want to complete their shopping list (Y/N)? ")
if answer.upper() == "Y":
    peoples[people]['status'] = 'complete'
print("Shopping list has been completed!")

option = int(input("\nEnter an option: "))

if option == 3:
    display = input("Who's do you want to look at?: ")
print("\nShopping List Of",display)
print(peoples[display])

option = int(input("\nEnter an option: "))

if option == 4:
    print("Thank You For Shopping With Us!")

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

option = input("Enter an option: ")
if option == "1":
        people = input("\nWho are you updating?: ")
print("\nCurrent values of people",people)
print(peoples[people])
print("\nAvailable items and their prices are:")
for item in peoples[people]["items"]:
    print(item, peoples[people]["items"][item])
item_to_update = input("Enter an item to update: ")
price = int(input("Enter updated price: "))
budget = peoples[people]["budget"] - peoples[people]["items"][item_to_update] - price
peoples[people]["items"][item_to_update] = price
peoples[people]["budget"] = budget
print("\nUpdated values of people",people)
print(peoples[people])

elif option == "2":
        update = input("Choose one of the 5 people to complete their shopping list: ")
        if update in peoples:
print("You have chosen",update)
peoples[people]['status'] = 'complete'
print("Shopping list has been completed!")

elif option == "3":
    display = input("Who's do you want to look at?: ")
print("\nShopping List Of",display)
print(peoples[display])

elif option == "4":
    print("Thank You For Shopping With Us!")
    break
else:
    print("That's not a valid answer! Try again!")

С тем же списком выше. После добавления моей информации к приведенному примеру я получу ошибку ниже.

ошибка с картинкой: https://i.stack.imgur.com/BrqBB.png

peoples = {
    "Mary": {
        "name": "Mary",
        "budget": 100,
        "items": {
            "Game": 0,
            "Book": 0,
            "Kindle": 0
        },
        "status": "incomplete"
    },
    "Steve": {
        "name": "Steve",
        "budget": 100,
        "items": {
            "Tie": 0,
            "Scarf": 0,
            "Amazon Echo": 0
        },
        "status": "incomplete"
    },
    "Kevin": {
        "name": "Kevin",
        "budget": 65,
        "items": {
            "Mario Kart": 0
        },
        "status": "incomplete"
    },
    "Jane": {
        "name": "Jane",
        "budget": 50,
        "items": {
            "Gift Card": 0,
            "Gloves": 0
        },
        "status": "incomplete"
    },
    "Chris": {
        "name": "Chris",
        "budget": 100,
        "items": {
            "Chocolates": 0,
            "Galaxy Tab": 0
        },
        "status": "incomplete"
    }
}

print("""
Menu
--------------------
1. Update Shopping List
2. Complete Shopping List
3. Display Shopping List
4. Exit Application
--------------------
Make your selection

""")

while True:
    option = input("Enter an option: ")
    if option == "1":
        people = input("\nWho are you updating?: ")
        print("\nCurrent values of people",people)
        print(peoples[people])
        print("\nAvailable items and their prices are:")
    for item in peoples[people]["items"]:
        print(item, peoples[people]["items"][item])
        item_to_update = input("Enter an item to update: ")
        price = int(input("Enter updated price: "))
        budget = peoples[people]["budget"] - peoples[people]["items"][item_to_update] - price
        peoples[people]["items"][item_to_update] = price
        peoples[people]["budget"] = budget
        print("\nUpdated values of people",people)
        print(peoples[people])
    
    elif option == "2":
        update = input("Choose one of the 5 people to complete their shopping list: ")
        if update in peoples:
            print("You have chosen",update)
            peoples[people]['status'] = 'complete'
            print("Shopping list has been completed!")
    
    elif option == "3":
        display = input("Who's do you want to look at?: ")
        print("\nShopping List Of",display)
        print(peoples[display])
    
    elif option == "4":
        print("Thank You For Shopping With Us!")
        break
    else:
        print("That's not a valid answer! Try again!")

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

отредактировано с ошибкой: https://i.stack.imgur.com/rTW6k.png

Синтаксическая ошибка, наконец, ушла, но теперь проблема заключается в том, что код просто повторяется на экране меню, никуда не переходя, например:

повторяю: https://i.stack.imgur.com/YNPdF.png

Если вы опубликуете то, что вы пробовали, кто-то может помочь вам исправить это.

Scott Hunter 19.12.2022 03:52

Название слишком общее. Может быть, объясните, что вы пытаетесь сделать и что вы пробовали с примерами кода?

コリン 19.12.2022 03:56
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы сделал что-то вроде этого:

while True:
    print(<instructions>)
    option = input("Enter an option: ")
    if option == "1":
        do stuff...
    elif option == "2":
        do number two stuff..
    elif option == "3":
        do that third stuff..
    elif option == "4":
        print("Thank You For Shopping With Us!")
        break
    else:
        print("That's not a valid answer! Try again!")

Это будет держать меню в цикле, и если выбран вариант 4, он выйдет из цикла и продолжится.

Теперь проблема с вашим отступом. Вы должны правильно сделать отступ в своем коде, чтобы python мог понять, что вы хотите, например:

x= "3"
if x == "2":
    print("hello world")
print("outside the indent")

ваш консольный вывод будет:

>>outside the indent

но если ваш код выглядит так:

x= "3"
if x == "2":
    print("hello world")
    print("outside the indent")

вы не получите никакого вывода из консоли, все находится в блоке кода «если». Отступы имеют решающее значение для того, чтобы Python продемонстрировал ожидаемое поведение. вам нужно убедиться, что весь ваш код для каждого условия имеет правильный отступ внутри блоков if, как в примере, который я привел выше. Кроме того, если вы хотите, чтобы это было в цикле, вам нужно поместить его в цикл с оператором while True: и сделать отступ внутри него.

Ваш окончательный результат должен выглядеть примерно так:

peoples = {
    "Mary": {
        "name": "Mary",
        "budget": 100,
        "items": {
            "Game": 0,
            "Book": 0,
            "Kindle": 0
        },
        "status": "incomplete"
    },
    "Steve": {
        "name": "Steve",
        "budget": 100,
        "items": {
            "Tie": 0,
            "Scarf": 0,
            "Amazon Echo": 0
        },
        "status": "incomplete"
    },
    "Kevin": {
        "name": "Kevin",
        "budget": 65,
        "items": {
            "Mario Kart": 0
        },
        "status": "incomplete"
    },
    "Jane": {
        "name": "Jane",
        "budget": 50,
        "items": {
            "Gift Card": 0,
            "Gloves": 0
        },
        "status": "incomplete"
    },
    "Chris": {
        "name": "Chris",
        "budget": 100,
        "items": {
            "Chocolates": 0,
            "Galaxy Tab": 0
        },
        "status": "incomplete"
    }
}

print("""
Menu
--------------------
1. Update Shopping List
2. Complete Shopping List
3. Display Shopping List
4. Exit Application
--------------------
Make your selection

""")

while True:
    option = input("Enter an option: ")
    if option == "1":
        people = input("\nWho are you updating?: ")
        print("\nCurrent values of people",people)
        print(peoples[people])
        print("\nAvailable items and their prices are:")
        for item in peoples[people]["items"]:
            print(item, peoples[people]["items"][item])
            item_to_update = input("Enter an item to update: ")
            price = int(input("Enter updated price: "))
            budget = peoples[people]["budget"] - peoples[people]["items"][item_to_update] - price
            peoples[people]["items"][item_to_update] = price
            peoples[people]["budget"] = budget
            print("\nUpdated values of people",people)
            print(peoples[people])

    elif option == "2":
        update = input("Choose one of the 5 people to complete their shopping list: ")
        if update in peoples:
            print("You have chosen",update)
            peoples[people]['status'] = 'complete'
            print("Shopping list has been completed!")

    elif option == "3":
        display = input("Who's do you want to look at?: ")
        print("\nShopping List Of",display)
        print(peoples[display])

    elif option == "4":
        print("Thank You For Shopping With Us!")
        break
    else:
        print("That's not a valid answer! Try again!")

Кроме того, просмотрите эту ссылку, так как очень важно, чтобы вы понимали, как правильно делать отступы в коде при написании python.

https://www.geeksforgeeks.org/indentation-in-python/

Когда я попробую это с моей информацией, это приведет к синтаксической ошибке для elif.

john man 19.12.2022 04:18

Опубликуйте редактирование с примером того, что вы пробовали. со всей трассировкой.

Sean Palmer 19.12.2022 04:25

я отредактировал пост с этим

john man 19.12.2022 04:33

Проблема в вашем отступе. Также вы не добавили while True: чтобы поместить его в цикл.

Sean Palmer 19.12.2022 04:43

Должно ли все это быть слева, если не с отступом, а также куда правильно должно идти значение while true? Спасибо.

john man 19.12.2022 04:49

Смотрите мои правки выше

Sean Palmer 19.12.2022 04:55

проверьте редактирование, я не вижу проблемы

john man 19.12.2022 05:11

извините, попробуйте это. Я не увидел там цикла for.

Sean Palmer 19.12.2022 05:29

Кроме того, если это решит вашу проблему, обязательно примите ответ, чтобы помочь другим людям быстрее найти ответ.

Sean Palmer 19.12.2022 05:34

не волнуйтесь, я это сделаю, но знаю, что проблема заключается в том, что код повторяется снова и снова.

john man 19.12.2022 05:37

Я только что запустил его, и он отлично работает для меня.

Sean Palmer 19.12.2022 05:43

о, ты прав, я тестировал не тот, теперь он работает, большое спасибо.

john man 19.12.2022 05:53

Другие вопросы по теме