2. Trajectòries d’una fresadora de control numèric¶
Avís
Per a resoldre aquest exercici no es poden fer servir iteracions (ni for ni while ), només les funcions predefinides de Python i les dels mòduls itertools, functools i operator. Tampoc no es poden fer servir llistes, tuples, diccionaris ni cap altra estructura de dades per a desar tots els elements d’un iterador.
Una trajectòria d’una fresadora de control numèric és una seqüència de punts en 3D amb coordenades enteres. La fresadora només es pot desplaçar una unitat en una de les tres coordenades. Quan analitzem dos punts consecutius de la trajectòria, volem detectar dos tipus d’anomalies:
No canvia cap coordenada,
Canvia més d’una coordenada o alguna coordenada canvia en més d’una unitat.
Dissenya les funcions següents i desa-les al mòdul trajectories
(fitxer trajectories.py):
- trajectories.troba_anomalies(trajec)¶
Genera l’iterador de les anomalies en la trajectòria trajec.
- Paràmetres:
trajec – iterador sobre una seqüència de punts 3D. Un punt 3D és una tupla amb tres elements que corresponen a les coordenades x, y i z.
- Retorna:
iterador de tuples formades pels dos punts de trajec sobre els que s’ha detectat una anomalia.
Per exemple,
>>> tr1 = [ ... (3, 5, 10), ... (3, 6, 10), ... (3, 6, 9), ... (2, 6, 9), ... (2, 6, 8), ... ] >>> it1 = iter(tr1) >>> an1 = troba_anomalies(it1) >>> an1 is iter(an1) True >>> list(an1) [] >>> tr2 = [ ... (3, 5, 10), ... (2, 6, 10), # canvia més d'una coordenada en una unitat ... (2, 6, 9), ... (2, 6, 9), # no canvia cap coordenada ... (2, 6, 8), ... (4, 6, 7), # canvia més d'una coordenada i una d'elles en més d'una unitat ... ] >>> it2 = iter(tr2) >>> an2 = troba_anomalies(it2) >>> an2 is iter(an2) True >>> list(an2) [((3, 5, 10), (2, 6, 10)), ((2, 6, 9), (2, 6, 9)), ((2, 6, 8), (4, 6, 7))]
Disposes d’un joc de proves més complet al fitxer
tests-troba_anomalies.txt.
- trajectories.classifica_anomalies(anom)¶
Classifica les anomalies en anom en tres iteradors corresponents alsiterador de les anomalies en la trajectòria trajec.
- Paràmetres:
anom – iterador sobre una seqüència de parelles de punts 3D anòmals.
- Tipus de retorn:
tuple[iterador, iterador]
- Retorna:
Una parella d’iteradors:
Conté les parelles de punts 3D d'anom en què no canvia cap coordenada.
Conté les parelles de punts 3D d'anom en què canvia més d’una coordenada o alguna coordenada canvia en més d’una unitat.
Per exemple,
>>> an1 = [ ... ((3, 5, 10), (2, 6, 10)), # canvia més d'una coordenada en una unitat ... ((2, 6, 9), (2, 6, 9)), # no canvia cap coordenada ... ((2, 6, 8), (4, 6, 7)), # canvia més d'una coordenada i una d'elles en més d'una unitat ... ] >>> it1 = iter(an1) >>> cl1_1, cl1_2 = classifica_anomalies(it1) >>> cl1_1 is iter(cl1_1) True >>> list(cl1_1) [((2, 6, 9), (2, 6, 9))] >>> cl1_2 is iter(cl1_2) True >>> list(cl1_2) [((3, 5, 10), (2, 6, 10)), ((2, 6, 8), (4, 6, 7))]
Disposes d’un joc de proves més complet al fitxer
tests-classifica_anomalies.txt.