Tengo un archivo de texto como este:

month /name/ number/ price
1 John 100 120.00
1 Sean 90 125.00
1 Laura 150 100.00
1 Joseph 95 140.00
1 Pam 91 105.00
2 John 110 120.00
2 Sean 98 100.00
2 Laura 100 100.00
2 Joseph 89 150.00
2 Pam 100 100.00
3 John 100 121.00
3 Sean 90 120.00
3 Laura 97 100.00
3 Joseph 120 110.00
3 Pam 101 100.00

Necesito obtener los ingresos de una persona específica (como Pam) por mes y los ingresos totales en 1,2 y 3 meses (número * precio). Tengo el código a continuación y la salida a continuación. Pero no tengo idea de cómo obtener los ingresos totales, ¿alguien puede darme algún consejo o idea?

#This is the code I use
f = input('Enter The File Name:')
sales_data = open("sales.txt",'r')
lines = sales_data.readlines()
m = input('Enter the Manager Name:')
print('Monthly Sales Report for' +'  ' + m)
for line in lines:
    line = line.split()
    tr = (float(line[2]) * float(line[3]))    
    if m in line:
        print(line[0] +'  ' + line[2] + '  ' + line[3] +'  ' + str(tr))
#This is the output I got

Enter the Manager Name: Pam
Monthly Sales Report for  Pam
1  91  105.00  9555.0
2  100  100.00  10000.0
3  101  100.00  10100.0
2
Steve Li 10 oct. 2019 a las 18:08

3 respuestas

La mejor respuesta

Una posible forma de resolver su problema es almacenar todos los valores mensuales en un diccionario para un administrador en particular:

file_name = input('Enter The File Name: ')

manager_summary = {'1':0.0, '2':0.0, '3':0.0}

with open (file_name, 'r') as fin:
    lines = fin.readlines()
    manager = input('Enter the Manager Name: ')
    print('Monthly Sales Report for' +'  ' + manager)
    for line in lines:
        line = line.split()
        if manager in line:
            manager_summary[line[0]] += float(line[-2])*float(line[-1])

manager_total = 0.0
for key, value in manager_summary.items():
    manager_total += value
print(manager_total)

El código lee el archivo de entrada a la vez, recorre todas las líneas en busca del administrador de destino y almacena las ventas mensuales acumuladas para ese administrador en un diccionario. Los ingresos totales para un período de 3 meses se calculan agregando valores acumulativos para cada mes almacenado en el diccionario.

Hubo un par de cambios con respecto a su código original que vale la pena señalar:

  • En su código, le pide al usuario un nombre de archivo, pero luego lo tiene codificado en la siguiente línea; aquí usa ese nombre de archivo de entrada.
  • En lugar de abrir el archivo con open, este código usa with open: con abrir es un administrador de contexto que cerrará automáticamente el archivo cuando sea necesario cerrarlo, algo que faltaba en su programa.
  • Los datos acumulativos se almacenan en un diccionario con claves que son números de mes. Esto permite tener más de una entrada mensual por gerente.
  • Los nombres de las variables son más significativos. Por lo general, no se recomienda usar variables como f, m, hace que el programa sea más propenso a errores y mucho menos legible. Los que se usan aquí son largos, siempre se te ocurre algo intermedio.
0
atru 10 oct. 2019 a las 15:37

Puede resolver esto usando un diccionario, específicamente un defaultdict. Puede realizar un seguimiento de un diccionario de nombres de personas a los ingresos.

Primero importe defaultdict y defina un diccionario:

from collections import defaultdict
revenue_dictionary = defaultdict(float)

Luego, justo después de calcular tr, agregue esto al diccionario:

revenue_dictionary[line[1]] += tr

Al final del script, tendrá un diccionario que se ve así:

{
    'John': 37300.0,
    'Sean': 31850.0,
    'Laura': 34700.0,
    'Joseph': 39850.0,
    'Pam': 29655.0
}

Y puede acceder a cualquiera de estos utilizando revenue_dictionary['Pam'], o m en lugar de 'Pam'.

0
Alex Stiff 10 oct. 2019 a las 15:24
f = input('Enter The File Name: ')
sales_data = open(f,'r')
lines = sales_data.readlines()
m = input('Enter the Manager Name: ')
print('Monthly Sales Report for ' + m)
TOTAL_REVENUE=0
for line in lines:
    line = line.split()
    if m in line:
        tr = (float(line[2]) * float(line[3]))
        TOTAL_REVENUE=TOTAL_REVENUE+tr
        print(line[0] +'  ' + line[2] + '  ' + line[3] +'  ' + str(tr))
print("GRAND TOTAL REVENUE: " + str(TOTAL_REVENUE))
0
pii_ke 10 oct. 2019 a las 15:48
58326042