Fwd: ayuda!!
Sonia
siosss en ono.com
Mie Ago 20 17:43:26 CEST 2003
sobre el ejercicio de los tramos, al cambiar la condicion de q ini>fin
(recorrer la lista al reves) me da como error de compilacion q la lista esta
fuera del rango en esta linea:
while ini>fin:
coste_tramo.append(coste[fin]) #costes #ESTA!!!!
lista_aux.append(tramo[fin]) #tramos
fin=fin-1
ves algo raro aqui?
envio el codigo completo por si acaso!
#Mediante una lista de 40 numeros , llamada coste_tramo, se representa el
coste en euros de cada uno de los 40 tramos de una autopista. Asi, al
recorrer el tramo i de la autopista tiene un coste de coste_tramo[i] euros.
#Diseña una funcion q, a partir de una lista y 2 numeros de tramos, ini y
fin, calcule el coste de recorrer consecutivamente los tramos de la
autopista q van desde ini hasta fin (ambos inclusive).
#Para ello deberas tener en cuenta las siguientes consideraciones:
# 1-los tramos de la autopista se pueden recorrer en ambos sentidos
# 2-por cada 3 tramos recorridos el mas barato de ellos, sera gratuito
#nota: debes suponer q los numeros de tramos pasados a la funcion , ini y
fin, seran siempre indices validos en la lista
def minimo(lista):
min=lista[0]
for i in range(0,len(lista)):
if lista[i]<min:
min=lista[i]
return min
def recorrer(coste,tramo,ini,fin):
rdo=0
dto=0
pago=0
lista_aux=[]
lista_min=[]
coste_tramo=[]
if ini<=fin: #recorremos la lista de ppio a fin
while ini<=fin:
coste_tramo.append(coste[ini]) #costes
lista_aux.append(tramo[ini]) #tramos
ini=ini+1
if len(lista_aux)==3:
lista_min.append(minimo(coste_tramo)) #gratis
lista_aux=[]
for i in coste_tramo:
pago=pago+i
for j in lista_min:
dto=dto+j
rdo=pago-dto
else: #recorremos la lista de fin a principio
while ini>fin:
coste_tramo.append(coste[fin]) #costes
lista_aux.append(tramo[fin]) #tramos
fin=fin-1
if len(lista_aux)==3:
lista_min.append(minimo(coste_tramo)) #gratis
lista_aux=[]
for i in coste_tramo:
pego=pago+i
for j in lista_min:
dto=dto+j
rdo=pago-dto
print rdo
#programa principal
tramo=[0,1,2,3,4,5,6,7,8,9,10,11,12]
coste=[2,3,2,2,1,2,3,4,4,2,3,3,2]
ini=int(raw_input('Introduce ini: '))
fin=int(raw_input('introduce fin: '))
recorrer(coste,tramo,ini,fin)
#comprobacion:
#recorrido del tramo 10 al tramo 4= 15 euros
#recorrido del tramo 4 al tramo 10= 16 euros
----- Original Message -----
From: Chema Cortés <ch3m4 en ch3m4.org>
To: <python-es en aditel.org>
Sent: Tuesday, August 19, 2003 2:56 AM
Subject: [Python-es] Re: Fwd: ayuda!!
> Sonia escribió:
>
> > al recorrer las listas como me dijiste y sumar sus numeros para despues
> > restar su total, ya me funciona.
> > el problema ahora es q tengo 2 opciones. recorrerla de principio a fin,
y de
> > fin a principio. de principio a fin no hay ningun problema(creo q me da
> > bien) , pero al hacer lo contrario siempre me da 0 (cero) y no se donde
esta
> > el cambio. simplemente he hecho en vez de:
> >
> >
> > if ini<=fin: #recorremos la lista de ppio a fin
> > while ini<=fin:
> >
> > coste_tramo.append(coste[ini]) #costes
> > lista_aux.append(tramo[ini]) #tramos
> > ini=ini+1
> >
> > #LO CAMBIO POR ESTO:
> >
> >
> > else: #recorremos la lista de fin a principio
> >
> > while fin>=ini:
> > coste_tramo.append(coste[fin]) #costes
> > lista_aux.append(tramo[fin]) #tramos
> > fin=fin-1
> >
> > #no se si el problema esta aqui
> > #por si acaso te mando el enunciado y el problema al completo
>
> Menos mal que has puesto el enunciado, porque con esto poco se te puede
> decir. Tienes mal puestos las condiciones. En un sentido ini<=fin; en el
> sentido contrario ini>fin
>
> > #Mediante una lista de 40 numeros , llamada coste_tramo, se representa
el
> > coste en euros de cada uno de los 40 tramos de una autopista. Asi, al
> > recorrer el tramo i de la autopista tiene un coste de coste_tramo[i]
euros.
> > #Diseña una funcion q, a partir de una lista y 2 numeros de tramos, ini
y
> > fin, calcule el coste de recorrer consecutivamente los tramos de la
> > autopista q van desde ini hasta fin (ambos inclusive).
> > #Para ello deberas tener en cuenta las siguientes consideraciones:
> > # 1-los tramos de la autopista se pueden recorrer en ambos sentidos
> > # 2-por cada 3 tramos recorridos el mas barato de ellos, sera gratuito
>
> Tienes dos posibilidades: 1) intentar "recorrer" la lista entre los dos
> tramos que te dicen, 2) crear una lista auxiliar con los elementos que
> necesitas.
>
> Te aconsejo la segunda opción. Utiliza el rebanado de listas:
>
> L_aux=L[i:j]
>
>
>
----------------------------------------------------------------------------
----
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es
Más información sobre la lista de distribución Python-es