Classe Tren

Implementació de la classe Tren

La classe Tren, especificada a continuació, permet de representar un tren format per vagons que són instàncies de la classe vagons.Vago.

class trens.Tren(nom)

Crea un tren amb el nom donat i sense cap vagó.

Atributs:

nom

Nom del tren (str)

Mètodes

afegir_vago(vago)

Afegeix un vagó al final del tren.

capacitat()

Retorna la capacitat total del tren, comptant persones assegudes i dretes.

Aquesta classe ha de suportar les operacions següents:

Operació

Resultat

t[i]

Retorna el i-èssim vagó del tren t. Es compleix que \(0 \leq i<len(p)\)

len(t)

Retorna el nombre de vogons del tren t.

Aquesta classe ha de suportar la funció str que retorna l’expressió “Tren nom de n vagons”` on nom és el nom del tren i n el seu nombre de vagons.

Els vagons estan indexats de tal manera que el primer vagó té l’índex 0, el segon l’índex 1 i així successivament. Quan s’afegeix un vagó al tren, l’índex del vagó afegit serà el nombre de vagons -1, és a dir, anirà al final del tren.

  1. Implementeu la classe Tren i deseu-la al fitxer trens.py. Per a fer-ho, tingueu en compte que serà necessari un atribut privat per a emmagatzemar els vagons.Es recomana que sigui una llista de vagons.

Per provar i passar els doctests, deseu el fitxer que conté la implementació de la classe Vago en el directori de treball. Disposeu d’un fitxer amb un joc de proves al fitxer tests-tren.txt.

Ús de la classe Tren

  1. La classe Tren és una classse contenidora de vagons. Doncs, seria desitjable poder iterar sobre els vagons d’un tren, és a dir, que la classe fos iterable. En una shell de Python, proveu d’executar el següent codi:

    >>> from trens import Tren
    >>> from vagons import Vago
    >>> t  = Tren('Intercity 2000')
    >>> t.afegir_vago(Vago('V1', 30, 70))
    >>> t.afegir_vago(Vago('V2', 40, 50))
    >>> t.afegir_vago(Vago('V3', 35, 60))
    >>> for v in t:
    ...     print(v)
    

    Funciona correctament? Per què?

  1. En el fitxer usa_tren.py, implementeu les funcions següents:

    usa_tren.mes_capacitat(tren1, tren2)
    Paràmetres:
    • tren1 – una instància de la classe Tren

    • tren2 – una instància de la classe Tren

    Retorna:

    el tren de més capacitat dels dos donats (Tren).

    usa_tren.seients_tren(tren)
    Paràmetres:

    tren – una instància de la classe Tren

    Retorna:

    el nombre total de seients del tren (int)

    usa_tren.vagons_capacitat(tren, capmin)
    Paràmetres:
    • tren – una instància de la classe Tren

    • capmin – un valor de capacitat de passatge (int)

    Retorna:

    un iterador dels vagons de tren que tenen una capacitat superior o igual a capmin, en el mateix ordre que són dins del tren.

Disposeu d’un joc de prova al fitxer tests-usa.txt.

Nota

Disposeu de solucions als fitxers trens.py. i usa_tren.py.