1. Capgirar de dos en dos (5 punts)

Avís

Per a resoldre aquest exercici no es poden fer servir llistes, tuples, diccionaris ni cap altra estructura de dades per a desar tots els elements d’un iterador.

Es demana que dissenyeu la funció especificada a continuació i la deseu en un fitxer anomenat capgira.py:

capgira.swap(it)
Paràmetres:

it – iterador sobre una seqüència \(X_1, X_2, X_3, X_4, X_5, X_6, \dots\) La seqüència pot de longitud qualsevol, fins i tot buida o infinita, però es garanteix que cap dels elements \(X_i\) val None.

Retorna:

iterador sobre la seqüència \(X_2, X_1, X_4, X_3, X_6, X_5, \dots\). És a dir, els elements de la seqüència original s’han intercanviat d’ordre, de dos en dos. L’iterador retornat ha de generar tots els element de la seqüència original, tant si té un nombre parell com un nombre senar d’elements.

Per exemple,


>>> it = iter('ABCDEFGH')
>>> for x in swap(it):
...     print(x, end=',')
B,A,D,C,F,E,H,G,
>>> next(it, 'the end')   # comprova que s'ha retornat un iterador i que ara s'ha exhaurit
'the end'
>>> it = iter(range(7))
>>> for x in swap(it):     # si l'iterador té un nombre senar d'elements,
...     print(x, end=',')  # el darrer element també cal generar-lo
1,0,3,2,5,4,6,

Disposeu d’un joc de proves més complet al fitxer tests-swap.txt