Escaquer iterable

  1. Ampliar la classe Escaquer de l’exercici Classe Escaquer per a que sigui iterable. L’iterador resultant recorrerà l’escaquer per files, i per cada fila, les seves columnes (De l’a fins l’h). Les files es recorreran de la numeració més gran a la numeració més petita (8 a 1).

    Per exemple,

    >>> import escaquer
    >>> import peces
    >>> e=escaquer.Escaquer()
    >>> e['c8'] = peces.Peça('Rei','Blanc')
    >>> it = iter(e)
    >>> next(it)
    'Buida'
    >>> next(it)
    'Buida'
    >>> next(it)
    Rei Blanc
    >>> next(it)
    'Buida'
    

    Una manera de fer-ho és afegir a la classe Escaquer (Baixeu-vos el fitxer escaquer.py, i el fitxer pessa.py) el mètode __iter__. Dins de __iter__, construïu un generador que faci el demanat.

  2. Afegir un nou mètode, __str__, a la classe peces.Peça que retorna un símbol que indica el valor de la peça.

    Per exemple,

    >>> print(peces.Peça('Torre','Blanca'),peces.Peça('Cavall','Negre'))
    ♖ ♞
    >>> print(peces.Peça('Àlfil','Blanc'), peces.Peça('Dama', 'Negra'))
    ♗ ♛
    >>> print(peces.Peça('Rei','Blanc'))
    
    

    Per implementar el mètode __str__, afegiu a la classe peces.Peça l’atribut de classe següent:

    peces.Peça.símbol
        símbol={('Rei','Blanc'):    '\u2654',
                ('Dama','Blanca'):  '\u2655',
                ('Torre','Blanca'): '\u2656',
                ('Àlfil','Blanc'):  '\u2657',
                ('Cavall','Blanc'): '\u2658',
                ('Peó','Blanc'):    '\u2659',
                ('Rei','Negre'):    '\u265A',
                ('Dama','Negra'):   '\u265B',
                ('Torre','Negra'):  '\u265C',
                ('Àlfil','Negre'):  '\u265D',
                ('Cavall','Negre'): '\u265E',
                ('Peó','Negre'):    '\u265F'}
    

    Aleshores, el mètode __str__ només ha de consultar el diccionari peces.Peça.símbol per retornar l”string amb el símbol que cal.

  3. Afegir un nou mètode, __str__, a la classe Escaquer.

    Un exemple del resultat del mètode pel cas d’un Escaquer e inicialitzat amb la configuració inicial del joc d’escacs:

    >>> print(e)
    |♜|♞|♝|♛|♚|♝|♞|♜|
    |♟|♟|♟|♟|♟|♟|♟|♟|
    | | | | | | | | |
    | | | | | | | | |
    | | | | | | | | |
    | | | | | | | | |
    |♙|♙|♙|♙|♙|♙|♙|♙|
    |♖|♘|♗|♕|♔|♗|♘|♖|
    

    Fer-ho a partir de l’iterador prèviament dissenyat, i només amb les funcions predefinides de python, itertools, functools i operator (sense for ni while).

Nota

Disposeu de jocs de de proves al fitxer test_escaquer2.txt.

Solució

Disposeu d’una solució als fitxers escaquer.py i peces.py.