Ma question est de savoir comment imprimer quelque chose si rien ne correspond à la boucle for. Par exemple:

a = {'store' : 'A', 'menu' : 'pizza', 'price' : 20000}
b = {'store' : 'B', 'menu' : 'chicken', 'price' : 18000}
c = {'store' : 'C', 'menu' : 'noodle', 'price' : 5000}
d = {'store' : 'D', 'menu' : 'sushi', 'price' : 15000}
e = {'store' : 'E', 'menu' : 'chicken', 'price' : 23000}
f = {'store' : 'F', 'menu' : 'pork', 'price' : 30000}

Total = [a, b, c, d, e, f]

l = input('what food?:  ')
p = int(input('how much you want to spend?  '))

for i in range(5):
    if Total[i]['menu'] == l and int(Total[i]['price']) <= p:
        print('menu', Total[i]['store'], 'price', Total[i]['price'])

Après la boucle, s'il n'y a pas de telles conditions de stockage satisfaisant, je veux imprimer 'There is no store'.

4
teukteukteuk 19 mai 2020 à 05:37

3 réponses

Meilleure réponse

Ajoutez simplement un booléen pour vérifier si un prix a été trouvé.

a = {'store' : 'A', 'menu' : 'pizza', 'price' : 20000}
b = {'store' : 'B', 'menu' : 'chicken', 'price' : 18000}
c = {'store' : 'C', 'menu' : 'noodle', 'price' : 5000}
d = {'store' : 'D', 'menu' : 'sushi', 'price' : 15000}
e = {'store' : 'E', 'menu' : 'chicken', 'price' : 23000}
f = {'store' : 'F', 'menu' : 'pork', 'price' : 30000}

Total = [a, b, c, d, e, f]

l = input('what food?:  ')
p = int(input('how much you want to spend?  '))

found = False
for i in range(5):
    if Total[i]['menu'] == l and int(Total[i]['price']) <= p:
        print('menu', Total[i]['store'], 'price', Total[i]['price'])
        found =  True

if not found:
    print ("No stores were found.")
3
Clinton Graham 19 mai 2020 à 02:45

Je transformerais vos variables de dictionnaire en un dictionnaire imbriqué, où menu est la clé:

a = {"store": "A", "menu": "pizza", "price": 20000}
b = {"store": "B", "menu": "chicken", "price": 18000}
c = {"store": "C", "menu": "noodle", "price": 5000}
d = {"store": "D", "menu": "sushi", "price": 15000}
e = {"store": "E", "menu": "chicken", "price": 23000}
f = {"store": "F", "menu": "pork", "price": 30000}

Total = [a, b, c, d, e, f]

restructured = {d.get("menu"): {k: v for k, v in d.items() if k != "menu"} for d in Total}

Ce qui vous donnera cette structure:

{'pizza': {'store': 'A', 'price': 20000}, 'chicken': {'store': 'E', 'price': 23000}, 'noodle': {'store': 'C', 'price': 5000}, 'sushi': {'store': 'D', 'price': 15000}, 'pork': {'store': 'F', 'price': 30000}}

Nous pourrions éviter cette restructuration en n'ayant pas de variables séparées pour commencer, et en optant plutôt pour un dictionnaire imbriqué. Vous n'avez pas non plus besoin de parcourir les dictionnaires (recherche linéaire), ce qui est beaucoup plus rapide pour les recherches répétitives (temps constant).

Vous pouvez alors simplement accéder à ce dictionnaire par élément de menu, et vérifier si vous pouvez acheter l'élément de menu ou non:

food = input("what food?:  ")
budget = int(input("how much you want to spend?:  "))

menu = restructured.get(food)
if menu:
    price = int(menu.get("price"))
    if budget <= price:
        store = menu.get("store")
        print(f"Store: {store}, Menu: {food}, Price: {price}")
    else:
        print(f"{food} costs too much!")
else:
    print(f"{food} not found in menu!")

J'ai gardé le code ci-dessus relativement simple, mais il existe des moyens plus élégants de le faire.

0
RoadRunner - MSFT 19 mai 2020 à 08:44

Si vous n'êtes intéressé que par le premier restaurant qui répondra à la condition, vous pouvez utiliser un construction Python moins connue:

for i in range(5):
    if Total[i]['menu'] == l and int(Total[i]['price']) <= p:
        print('menu', Total[i]['store'], 'price', Total[i]['price'])
        break
else:
    print("Sorry, there are no matching restaurants.")
3
Selcuk 19 mai 2020 à 02:46