2010/BusHMBcn/Script
De Hackmeeting
CategorÃa:Code Este script calcula el precio final del billete cuando no todos los pasajeros puede pagar la misma cantidad. Lee la lista de pasajeros y la cantidad en euros que cada pasajero puede pagar, en un archivo de texto llamado pasajeros.txt con el siguente formato:
alba 50 ana 11 baltasar 11 carme 14 etc...
#! /usr/bin/env python
## Calcula el precio del billete cuando no
## todas pueden pagarlo, viajando todas :)
## (suponiendo que el numero de plazas es igual
## o mayor que el de pasajeras)
## Nombres
hackbus = 485.0
total_a = 0
total_b = 0
n = 1
repetir = True
a = {} ## Los que pagarian el billete integro
b = {} ## Los que solo una parte
d = {}
## Lee el archivo y lo copia al diccionario 'a'
for i in file('pasajeros.txt'):
c = i.split()
a[c[0]] = int(c[1])
## Calcula el precio inicial del billete
billete = hackbus / len(a)
precio_hackbus = hackbus
billete_inicial= billete
## Si a alguien no le llega para el billete, lo copia
## al diccionario 'b', recalcula el nuevo billete
## y repite la operacion si hace falta
while repetir:
for i in a:
if a[i] < billete:
d[i] = a[i]
hackbus -= a[i]
billete = hackbus / (len(a) - n)
n += 1
if d:
claves = d.keys()
for i in claves:
del a[i]
b[i] = d[i]
del d[i]
n = 1
else: repetir = False
## Suma el total de los valores del diccionario 'b',
valores = b.values()
for suma in valores: total_b += suma
## Ordena 'a' y 'b'
claseA = a.keys()
claseA.sort()
claseB = b.items()
claseB.sort()
## Imprime en la salida estantar
print "Precio del HackBus: " + str(precio_hackbus)
print "Numero de pasajeros: " + str(len(a) + len(b))
print "Precio inicial del billete: " + str(billete_inicial)
print "Precio final del billete: " + str(billete)
print "Suma en euros de los billetes de la clase A: " + str(billete * len(a))
print "suma en euros de lo que puede pagar la clase B: " + str(total_b)
print
print "Clase A (pagaran el billete integro):"
print claseA
print
print "Clase B (pagaran una parte del billete, el maximo que dijeron que estaban dispuestos a gastarse): "
print claseB

