Как умножить разные числа из разных строк в тексте - PullRequest
1 голос
/ 10 октября 2019

У меня есть такой текстовый файл:

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

Мне нужно получать доход определенного человека (например, Пэм) в месяц и общий доход за 1,2 и 3 месяца (число * цена),У меня есть код ниже и вывод ниже. Но я понятия не имею, как получить общий доход, кто-нибудь может дать мне какой-нибудь совет или идею?

#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

Ответы [ 3 ]

0 голосов
/ 10 октября 2019

Один из возможных способов решения вашей проблемы - сохранить все ежемесячные значения в словаре для конкретного менеджера:

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)

Код читает файл ввода сразу, просматривает все строки в поискахцелевой менеджер и сохраняет совокупные ежемесячные продажи для этого менеджера в словаре. Затем общий доход за 3-месячный период вычисляется путем добавления кумулятивных значений для каждого месяца, хранящегося в словаре.

Произошло несколько изменений в отношении вашего исходного кода, которые стоит отметить:

  • В вашем коде вы спрашиваете у пользователя имя файла, но затем вы жестко запрограммируете его в следующей строке - здесь вы используете это имя входного файла.
  • Вместо открытия файла с open этот код использует with open - с open - это контекстный менеджер, который автоматически закроет файл для вас, когда необходимо закрытие, то, чего вам не хватало в вашей программе.
  • Накопительные данные хранятся в словаре с ключами, которые являются номерами месяцев. Это позволяет иметь более одной ежемесячной записи на одного менеджера.
  • Имена переменных более значимы. Обычно не рекомендуется использовать такие переменные, как f, m, это делает программу более подверженной ошибкам и менее читаемой. Используемые здесь длинные, вы всегда можете придумать что-то промежуточное.
0 голосов
/ 10 октября 2019
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 голосов
/ 10 октября 2019

Вы можете решить эту проблему, используя словарь - в частности, defaultdict. Вы можете отслеживать словарь имен людей до дохода.

Сначала импортируйте defaultdict и определите словарь:

from collections import defaultdict
revenue_dictionary = defaultdict(float)

Затем, сразу после того, как вы вычислили tr, добавьтеэто к словарю:

revenue_dictionary[line[1]] += tr

В конце скрипта у вас будет словарь, который выглядит следующим образом:

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

И вы можете получить доступ к любому из них, используя revenue_dictionary['Pam'] или m вместо 'Pam'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...