Guide for El cistell de la compra (2)
Com abordar aquest problema
Se't donen N productes (nom i preu) i, al final, el nom d'un producte que vols comprovar. Has de dir \ si el tens a la cistella i, si el trobes, dir també quin és l'anterior en ordre alfabètic (si n'hi ha).
Idea general:
- Llegeix el nombre N i, a continuació, els N parells (nom, preu).
- Guarda'ls en una llista de parelles (nom, preu).
- Ordena la llista pel nom del producte, en ordre alfabètic.
- Llegeix el nom del producte que es vol comprovar.
- Busca'l dins la llista ja ordenada. Si no hi és, escriu "NO N'HI HAVIA".
- Si hi és, escriu "SI, M'HA COSTAT " seguit del preu. Si, a més, no és el primer de la llista \ ordenada, afegeix " I TAMBE TINC " amb el nom i el preu del producte immediatament anterior en \ l'ordre alfabètic.
Paranys habituals:
- Cal ordenar per nom, no pel l'ordre en què s'han llegit els productes.
- El "producte anterior" ho és en ordre alfabètic un cop ordenada la llista, no l'anterior a l'entrada.
- Si el producte trobat és el primer en ordre alfabètic, no cal afegir la segona part del missatge.
- Vigila com formates el preu perquè coincideixi amb com l'has llegit.
Pista per a Python
Llegeix els productes en una llista de parelles (nom, preu), ordena-la pel nom, i després busca-hi \
el producte demanat per saber també quin és el seu anterior alfabètic:
n = int(input())
productes = []
for _ in range(n):
nom, preu = input().split()
productes.append((nom, float(preu)))
productes.sort(key=lambda p: p[0])
buscat = input().strip()
posicio = -1
for i, (nom, preu) in enumerate(productes):
if nom == buscat:
posicio = i
break
if posicio == -1:
print("NO N'HI HAVIA")
else:
nom, preu = productes[posicio]
sortida = f"SI, M'HA COSTAT {preu}"
if posicio > 0:
nom_ant, preu_ant = productes[posicio - 1]
sortida += f" I TAMBE TINC {nom_ant} A {preu_ant}"
print(sortida)