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