无法获取列表以添加一项Python3.6

2024-04-19 06:14:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个类persona(person),他在城市里到处旅行。有一个list属性lista_ciudades_visitadas存储访问城市的列表。方法viajar(travel)应该使用self.lista_ciudades_visitadas.append(ciudad_a_anadir)添加访问的城市。你知道吗

代码如下:

class Persona:
    def __init__(self,nombre,edad,vehiculo):
        self.nombre = nombre
        self.edad = edad
        self.cuenta_horas = 0
        self.lista_ciudades_visitadas = []
        self.vehiculo = vehiculo


    def viajar(self,ciudad,km_a_viajar):
        if self.vehiculo.km_recorridos + km_a_viajar < self.vehiculo.km_max:
            vehiculo.km_recorridos = vehiculo.km_recorridos + km_a_viajar
            tiempo_de_viaje = km_a_viajar / self.vehiculo.vel_prom
            self.cuenta_horas = self.cuenta_horas + tiempo_de_viaje
            ciudad_a_anadir=str(ciudad)
            self.lista_ciudades_visitadas.append(ciudad_a_anadir)
            print('La persona ',format(self.nombre) + 'llegó a', format(self.lista_ciudades_visitadas[-1]) + 'en {}',format(tiempo_de_viaje) + 'horas, y ahora su auto es de color {}',format(ciudad.color))
        else:
            tiempo_de_viaje = (self.vehiculo.km_max - km_a_viajar) / self.vehiculo.vel_prom
            self.cuenta_horas = self.cuenta_horas + tiempo_de_viaje
            print('La persona ',format(self.nombre) + 'no llegó a ', format(self.lista_ciudades_visitadas[-1]) + ',se quedó en panne a las {}',format(tiempo_de_viaje))

class Auto:
    def __init__(self):
        self.color = 'Blanco'
        self.vel_prom = 80
        self.km_recorridos = 0
        self.km_max = 1500
        self.num_ciudades_visitadas = 0
        self.estado = 'Funcionando'
        self._eficiencia = 0

    def recorrer(self,km_a_recorrer):
        if self.km_recorridos + km_a_recorrer < self.km_max:
            self.km_recorridos = self.km_recorridos + km_a_recorrer
            tiempo = km_a_recorrer / self.vel_prom
            print ('El vehículo demoró {} horas '.format(tiempo))
        else:
            km_a_anadir = 1500 - self.km_recorridos
            self.km_recorridos = 1500
            self.estado = 'En Panne'

class Ciudad:
    def __init__(self,nombre,color):
        self.nombre = nombre
        self.color = color
        self.num_veh_pintados = 0

    def pintar(self,Auto):
        Auto.color = self.color
        Auto.num_ciudades_visitadas = Auto.num_ciudades_visitadas + 1
        self.num_veh_pintados = self.num_veh_pintados + 1

# Creamos las ciudades
roma = Ciudad("Roma", "Verde")
santiago = Ciudad("Santiago", "Rojo")
lima = Ciudad("Lima", "Azul")
valparaiso = Ciudad("Valparaso", "Celeste")

# Creamos un vehculo medio usado
vehiculo = Auto()
tiempo_de_viaje = vehiculo.recorrer(900)
roma.pintar(vehiculo)


# Creamos las personas con sus respectivos veh´ıculos
persona_1 = Persona("Raúl", 45, vehiculo)
persona_2 = Persona("Laura", 45, Auto())
persona_3 = Persona("Juan", 17, Auto())

# Las personas viajan, los n´umeros no calzan pero no importa
persona_1.viajar(roma, 99)
persona_2.viajar(santiago, 2)
persona_2.viajar(valparaiso, 500)
persona_2.viajar(santiago, 1000)
persona_3.viajar(lima, 6000)
persona_1.viajar(santiago, 1278)
persona_2.viajar(roma, 200)     

然后我试着运行一些例子(persona_1persona_2,…),但我明白了,我不明白为什么!你知道吗

El vehículo demoró 11.25 horas 
<__main__.Ciudad object at 0x0000020249758BE0>
La persona  Raúlllegó a <__main__.Ciudad object at 0x0000020249758BE0>en {} 1.2375horas, y ahora su auto es de color {} Verde
<__main__.Ciudad object at 0x000002024972B048>
La persona  Laurallegó a <__main__.Ciudad object at 0x000002024972B048>en {} 0.025horas, y ahora su auto es de color {} Rojo
<__main__.Ciudad object at 0x0000020249722198>
La persona  Laurallegó a <__main__.Ciudad object at 0x0000020249722198>en {} 6.25horas, y ahora su auto es de color {} Celeste
<__main__.Ciudad object at 0x000002024972B048>
La persona  Laurallegó a <__main__.Ciudad object at 0x000002024972B048>en {} 12.5horas, y ahora su auto es de color {} Rojo
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-12-8d451dca4b3b> in <module>()
     75 persona_2.viajar(valparaiso, 500)
     76 persona_2.viajar(santiago, 1000)
---> 77 persona_3.viajar(lima, 6000)
     78 persona_1.viajar(santiago, 1278)
     79 persona_2.viajar(roma, 200)

<ipython-input-12-8d451dca4b3b> in viajar(self, ciudad, km_a_viajar)
     20             tiempo_de_viaje = (self.vehiculo.km_max - km_a_viajar) / self.vehiculo.vel_prom
     21             self.cuenta_horas = self.cuenta_horas + tiempo_de_viaje
---> 22             print('La persona ',format(self.nombre) + 'no llegó a ', format(self.lista_ciudades_visitadas[-1]) + ',se quedó en panne a las {}',format(tiempo_de_viaje))
     23 
     24 class Auto:

IndexError: list index out of range

我不明白为什么它不能显示城市,它只是显示”主对象...". 它还说列表超出范围,但-1只是最后一项!你知道吗


Tags: selfformatdecolorkmpersonatiemponombre