Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/190: Рейтинг темы: голосов - 190, средняя оценка - 4.87
10 / 10 / 0
Регистрация: 20.10.2019
Сообщений: 119

Чеки

16.03.2020, 21:10. Показов 39294. Ответов 13

Студворк — интернет-сервис помощи студентам
Итак, сама задача:
Модифицируйте функцию из задачи «Чек» таким образом, чтобы она могла принимать на вход информацию о нескольких чеках.

Для разделения товаров разных чеков используется строка «---». В документе res.xlsx информация о каждом чеке должна располагаться на отдельном листе. При дублировании товара (совпадении названия и цены за единицу) в чеке в res.xlsx должна создаваться только одна строка с общим количеством купленного товара.

Товары в чеке должны быть отсортированы по алфавиту.

Формат ввода
Многострочный текст в параметре text.

Формат вывода
Файл res.xlsx, содержащий обработанную информацию.

Предыдущая программа и мой код к ней(решена правильно, так что надо просто внести изменения/дополнения):
Напишите функцию export_check(text), которая принимает на вход текст, где каждая строка состоит из:

названия товара (строка)
цены за единицу товара (вещественное число)
количества единиц товара (целое число)
(Значения внутри строки разделены символом табуляции).
Ваша программа должна обработать полученные данные и создать документ Excel res.xlsx, в котором будут следующие столбцы:

«Товар», «Цена за единицу товара», «Количество товара», «Общая стоимость товара» (названия столбцов выводить не надо)

В столбце «Общая стоимость товара» должна содержаться формула, которая рассчитывает общую стоимость товара как произведение цены и количества товара (с использованием простого перемножения ячеек)

Последней строкой должно идти «Итого», c пустыми значениями в столбцах «Цена за единицу товара» и «Количество товара».
В столбце «Общая стоимость товара» должна содержаться формула, которая считает общую сумму покупок. (с использованием функции Excel СУММ)

Формат ввода
Текст из нескольких строк в параметре text.

Формат вывода
Документ res.xlsx с преобразованными данными.


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import xlsxwriter
 
 
def export_check(text):
    workbook = xlsxwriter.Workbook('res.xlsx')
    worksheet = workbook.add_worksheet()
    text = text.split('\n')
    s = 0
    for i in range(len(text)):
        name = text[i].split('\t')[0]
        price = text[i].split('\t')[1]
        n = text[i].split('\t')[2]
        worksheet.write(i, 0, name)
        worksheet.write(i, 1, float(price))
        worksheet.write(i, 2, int(n))
        worksheet.write(i, 3, '=B' + str(i + 1) + '*C' + str(i + 1))
        s += 1
    worksheet.write(s, 0, 'Итого')
    worksheet.write(s, 3, '=SUM(D1:D' + str(s) + ')')
    workbook.close()
Добавлено через 1 минуту
Вместо смайлика
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.03.2020, 21:10
Ответы с готовыми решениями:

Чеки
Напишите функцию export_check(text), которая принимает на вход текст, где каждая строка состоит из: названия товара (строка) цены за...

Чеки
что за чеки и для чего они нужны??

Чеки
Модифицируйте функцию из задачи «Чек» таким образом, чтобы она могла принимать на вход информацию о нескольких чеках. Для разделения...

13
10 / 10 / 0
Регистрация: 20.10.2019
Сообщений: 119
16.03.2020, 21:13  [ТС]
Блин , я не знаю как это испраить , так что кину фото...
Миниатюры
Чеки  
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
16.03.2020, 21:33
Balaclava, пишем код в окне выделяем и смотрим по скрину



0
10 / 10 / 0
Регистрация: 20.10.2019
Сообщений: 119
20.03.2020, 10:14  [ТС]
Круто, однако это не решение и не помощь, не мог бы ты помочь пожалуйста?Semen-Semenich,
0
10 / 10 / 0
Регистрация: 20.10.2019
Сообщений: 119
09.04.2020, 14:17  [ТС]
Помогите, ну кто нибудь!!!
0
10 / 9 / 0
Регистрация: 10.04.2020
Сообщений: 40
07.05.2020, 13:28
Цитата Сообщение от Balaclava Посмотреть сообщение
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import xlsxwriter
def export_check(text):
    workbook = xlsxwriter.Workbook('res.xlsx')
    worksheet = workbook.add_worksheet()
    text = text.split('\n')
    s = 0
    for i in range(len(text)):
        name = text[i].split('\t')[0]
        price = text[i].split('\t')[1]
        n = text[i].split('\t')[2]
        worksheet.write(i, 0, name)
        worksheet.write(i, 1, float(price))
        worksheet.write(i, 2, int(n))
        worksheet.write(i, 3, '=B' + str(i + 1) + '*C' + str(i + 1))
        s += 1
    worksheet.write(s, 0, 'Итого')
    worksheet.write(s, 3, '=SUM(D1:D' + str(s) + ')')
    workbook.close()
Где не посмотрю, в задачах "Чек" и "Чеки", у всех один и тот же код. Вы издеваетесь? XD
0
 Аватар для Brumbar
13 / 11 / 1
Регистрация: 24.11.2019
Сообщений: 18
07.05.2020, 15:44
Цитата Сообщение от Ololololol_19 Посмотреть сообщение
Где не посмотрю, в задачах "Чек" и "Чеки", у всех один и тот же код. Вы издеваетесь? XD
Ololololol_19,Ну хотя бы я не один такой
0
0 / 0 / 0
Регистрация: 07.05.2020
Сообщений: 2
07.05.2020, 16:33
Balaclava, Привет, ты смог решить эту задачу? Очень интересно было бы посмотреть решение
0
10 / 10 / 0
Регистрация: 20.10.2019
Сообщений: 119
07.05.2020, 17:23  [ТС]
Не, не получилось
0
1 / 1 / 0
Регистрация: 10.05.2020
Сообщений: 3
10.05.2020, 17:49
Думаю, я тут неправильно считываю. Может ты найдешь ошибку
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import xlsxwriter
 
 
def export_check(text):
    workbook = xlsxwriter.Workbook('res.xlsx')
    now = []
    for i in text:
        if i != '---':
            now.append(i)
        else:
            check(now, workbook)
        now = []
    if now:
        check(now, workbook)
    workbook.close()
 
 
def check(text, workbook):
    worksheet = workbook.add_worksheet()
    text = text.split('\n')
    for i in range(len(text)):
        text[i] = text.split('\t')
    text.sort(key=lambda xx: xx[0])
    x = 0
    while x != len(text):
        if tuple(text[x][:2]) == tuple(text[x + 1][:2]):
            text[x][2] += text[x + 1][2]
        else:
            x += 1
    for i in range(len(text)):
        name, price, num = text[i]
        worksheet.write(i, 0, name)
        worksheet.write(i, 1, int(price))
        worksheet.write(i, 2, int(num))
        worksheet.write(i, 3, '=B{}*C{}'.format(str(i + 1), str(i + 1)))
    worksheet.write(len(text), 0, 'Итого')
    worksheet.write(len(text), 3, '=SUM(D1:D{})'.format(str(len(text))))
Добавлено через 2 минуты
Или не правильно обрабатываю данные
0
1 / 1 / 0
Регистрация: 10.05.2020
Сообщений: 3
11.05.2020, 16:35
На третьем тесте валиться
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import xlsxwriter
 
 
def export_check(text):
    workbook = xlsxwriter.Workbook('res.xlsx')
    now = []
    text = text.split('\n')
    for i in text:
        if i != '---':
            now.append(i)
        else:
            check(now, workbook)
            now = []
    if now:
        check(now, workbook)
    workbook.close()
 
 
def check(text, workbook):
    worksheet = workbook.add_worksheet()
    x = 0
    text = list(map(lambda x: tuple(x.split('\t')), text))
    text.sort(key=lambda xx: xx)
    while x != len(text) - 1:
        if tuple(text[x][:2]) == tuple(text[x + 1][:2]):
            text[x] = tuple([text[x + 1][0], text[x + 1][1],
                             int(text[x + 1][2]) + int(text[x][2])])
            del text[x + 1]
        else:
            x += 1
    for i in range(len(text)):
        name, price, num = text[i]
        worksheet.write(i, 0, name)
        worksheet.write(i, 1, int(price))
        worksheet.write(i, 2, int(num))
        worksheet.write(i, 3, '=B{}*C{}'.format(str(i + 1), str(i + 1)))
    worksheet.write(len(text), 0, 'Итого')
    worksheet.write(len(text), 3, '=SUM(D1:D{})'.format(str(len(text))))
0
 Аватар для Brumbar
13 / 11 / 1
Регистрация: 24.11.2019
Сообщений: 18
12.05.2020, 10:05
Держите и радуйтесь
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import xlsxwriter
 
 
def export_check(text):
    workbook = xlsxwriter.Workbook('res.xlsx')
 
    checks = list(map(lambda x: sorted(x.split('\n')), text.split("---")))
    for i in checks:
        add = {}
        for j in i:
            if j == '':
                continue
 
            cc = j.split('\t')
            key, val = (cc[0], int(cc[1])), int(cc[2])
 
            if key in add:
                add[key] += val
            else:
                add[key] = val
        s1 = add.keys()
        s = []
        for i in s1:
            s.append([i[0], int(add[i]), int(i[1])])
        s.sort()
        f = {}
        for i in s:
            f[(i[0], i[2])] = add[(i[0], i[2])]
            del add[(i[0], i[2])]
        if f:
            worksheet = workbook.add_worksheet()
            for row, (item_price, count) in enumerate(f.items()):
                worksheet.write(row, 0, item_price[0])
                worksheet.write(row, 1, float(item_price[1]))
                worksheet.write(row, 2, float(count))
                worksheet.write(row, 3, f'=B{row + 1}*C{row + 1}')
 
            row += 1
 
            worksheet.write(row, 0, 'Итого')
            worksheet.write(row, 3, f'=SUM(D1:D{row})')
    workbook.close()
6
1 / 1 / 0
Регистрация: 08.03.2023
Сообщений: 5
08.03.2023, 14:23
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import xlsxwriter
 
 
def export_check(text):
    workbook = xlsxwriter.Workbook('res.xlsx')
    data = []
    proverka = []
    text = text.split("---")
    for check in text:
        if len(check) > 0:
            check = check.split("\n")
            check = list(filter(lambda x: len(x) >= 1, check))
            for tovar in check:
                tovar = tovar.split("\t")
                if tovar[0] not in proverka:
                    proverka.append(tovar[0])
                    data.append([tovar[0], int(tovar[1]), int(tovar[2])])
                else:
                    flag = False
                    for i in range(len(data)):
                        if data[i][0] == tovar[0]:
                            if data[i][1] == int(tovar[1]):
                                data[i][2] += int(tovar[2])
                                flag = True
                    if not flag:
                        data.append([tovar[0], int(tovar[1]), int(tovar[2])])
            data = list(sorted(data, key=lambda x: x[0]))
            for i in range(len(data)):
                data[i] = tuple(data[i])
            proverka.clear()
            worksheet = workbook.add_worksheet()
            for row, (tovar, price, total) in enumerate(data):
                b = "B" + str(row + 1)
                c = "C" + str(row + 1)
                worksheet.write(row, 0, tovar)
                worksheet.write(row, 1, price)
                worksheet.write(row, 2, total)
                worksheet.write(row, 3, f"={b}*{c}")
            s = "D" + str(len(data))
            row += 1
            worksheet.write(row, 0, "Итого")
            worksheet.write(row, 3, f"=SUM(D1:{s})")
            data.clear()
    workbook.close()
0
12 / 11 / 3
Регистрация: 04.11.2024
Сообщений: 101
16.03.2025, 18:22
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
def export_check(text):
    import xlsxwriter
    
    workbook = xlsxwriter.Workbook('res.xlsx')
    
    al = text.split('---')
    for x in al:
        worksheet = workbook.add_worksheet()
        worksheet.write('A1', 'Товар')
        worksheet.write('B1', 'Цена за единицу товара')
        worksheet.write('C1', 'Количество товара')
        worksheet.write('D1', 'Общая стоимость товара')
        cur = 1
        d = {}
        dif = sorted(list(x.strip('\n').split('\n')), key=lambda x: x.split('\t')[0])
        for j in dif:
            tov, price, amount = j.split('\t')
            if (tov, price) not in d.keys():
                d[(tov, price)] = amount
            else:
                d[(tov, price)] = int(d[(tov, price)]) + int(amount)
        for t, _ in d.items():
            tov, price = t
            worksheet.write('A' + str(cur), tov)
            worksheet.write('B' + str(cur), price)
            worksheet.write('C' + str(cur), _)
            b = 'B' + str(cur)
            c = 'C' + str(cur)
            worksheet.write('D' + str(cur), '=' + str(b) + '*' + str(c))
            cur += 1
        a = 'D' + str(1)
        b = 'D' + str(cur - 1)
        b1 = 'D' + str(cur)
        worksheet.write('A' + str(cur), 'Итого')
        worksheet.write(b1, '=SUM(' + a + ':' + b + ')')
    workbook.close()
Вот так короче и как будто понятнее
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.03.2025, 18:22
Помогаю со студенческими работами здесь

Чеки
Модифицируйте функцию из задачи «Чек» таким образом, чтобы она могла принимать на вход информацию о нескольких чеках. Для разделения...

Чеки
Модифицируйте функцию из задачи «Чек» таким образом, чтобы она могла принимать на вход информацию о нескольких чеках. Для разделения...

Чеки
Помогите пожалуйста решить задачу! Вот условие: Модифицируйте функцию из задачи «Чек» таким образом, чтобы она могла принимать на вход...

Чеки
Решение чек import xlsxwriter def export_check(c): a = xlsxwriter.Workbook('res.xlsx') b = a.add_worksheet() ...

Чеки
Модифицируйте функцию из задачи «Чек» таким образом, чтобы она могла принимать на вход информацию о нескольких чеках. Для разделения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru