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

Длинный чек

22.02.2019, 16:03. Показов 38374. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для работы небольшого магазинчика вас попросили сделать небольшой набор функций, обеспечивающих работу с чеками. В качестве пробной версии вам нужно реализовать всего два действия: добавление покупки к набору покупаемых товаров, и печать чека. После того как чек напечатан должно быть возможно вводить новый список товаров.
По правилам оформления документов в каждом чеке вы должны напечатать сначала номер чека (нумерация начинается с единицы) и число товаров, затем список товаров с ценами и в конце — итоговую стоимость. Из-за того, что вы не знаете число товаров, пока кассир не «пробьет» последний товар, нельзя печатать чек по мере ввода товаров. Приходится сначала добавить все необходимые товары и только затем печатать весь чек целиком. В конце чека печатается черта (состоящая из пяти знаков минус), по которой он отрывается от ленты.
Организуйте две функции: add_item(itemName, itemCost) и print_receipt(), которые реализуют указанный функционал. Форматирование сделайте по шаблону в примере.
В случае, когда чек пуст, print_receipt не должна печатать чек. Не забудьте, что после того как чек напечатан, набор выбранных товаров должен обнулиться, чтобы можно было вводить товары для нового чека.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.02.2019, 16:03
Ответы с готовыми решениями:

Длинный чек
Ограничение времени 1 секунда Ограничение памяти 64Mb Ввод стандартный ввод или input.txt Вывод стандартный вывод или...

Интерактивный чек
Вам дан файл в формате csv с ценами на товары некоторого магазина (например, такой), содержащий название товара и его цену через...

Длинный плакат
Юный художник Вася нарисовал плакат с очень большим числом и решил повесить его на самую длинную стену школы. К сожалению, даже самая...

12
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
22.02.2019, 16:11
yugin234, напишите сначала свою версию реализации...
и пример входных данных и выхода напишите.
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
22.02.2019, 16:19
yugin234, да, нужно определить несколько функций со списками

Хранилище чеков
Хранилище товаров
Функция "чек" - туда вводятся товары а потом сохраняются

что еще?
0
 Аватар для Semen-Semenich
5224 / 3471 / 1173
Регистрация: 21.03.2016
Сообщений: 8,298
22.02.2019, 19:12
Цитата Сообщение от yugin234 Посмотреть сообщение
пока кассир не «пробьет» последний товар
а какой признак последнего товара?
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
22.02.2019, 19:59
А если 2 единицы одного товара?

Добавлено через 2 минуты
yugin234, и как их считать тогда, как один товар? или как два?.. и по-хорошему нужно ещё количество единиц каждого товара выводить.
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
22.02.2019, 20:43
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
а какой признак последнего товара?
в этих делах признак может быть только один - рассчитать или продолжить добавлять

еще бывает - удалить - введите номер позиции
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
22.02.2019, 20:44
Лучший ответ Сообщение было отмечено mik-a-el как решение

Решение

yugin234, в общем, вот на скорую написал программу, которая всё красиво выводит. Хотите - улучшайте. Думаю, под себя сможете подогнать сами?

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
45
46
47
i = 1
d = {}
def add_item(itemName, itemCost):
  global d
  if itemName in d:
    d[itemName][0] += 1
  else:
    d[itemName] = [1, itemCost]
  return d
 
def print_receipt():
  global i
  total = 0
  print('чек:', i, '; видов товара:', len(d), 'всего товаров:', end=' ')
  c = 0
  for j in d.values():
    c += j[0]
  print(c)
  for k, v in d.items():
 
    print(k + ' x' + str(v[0]), ':', v[0]*v[1])
    total += v[0]*v[1]
  print('итоговая стоимость:', total)
  print('-----')
  i+=1
 
 
itemdict = {}
 
while True:
  itemName = input('Выберите товар')
  if itemName in itemdict:
    print('Добавлена ещё одна единица товара', itemName)
    add_item(itemName, itemdict[itemName])
    continue
  if itemName == '':
    print()
    print_receipt()
    d = {}
    itemdict = {}
    total = 0
    continue
  if itemName == '#':
    break
  itemCost = float(input('Цена'))
  itemdict[itemName] = itemCost
  add_item(itemName, itemCost)
Данные
Кликните здесь для просмотра всего текста

Выберите товар бананы
Цена 30
Выберите товар молоко
Цена 20
Выберите товар апельсин
Цена 15
Выберите товар бананы
Добавлена ещё одна единица товара бананы
Выберите товар молоко
Добавлена ещё одна единица товара молоко
Выберите товар

чек: 1 ; видов товара: 3 всего товаров: 5
бананы x2 : 60.0
молоко x2 : 40.0
апельсин x1 : 15.0
итоговая стоимость: 115.0
-----
Выберите товар гречка
Цена 14
Выберите товар рис
Цена 10
Выберите товар гречка
Добавлена ещё одна единица товара гречка
Выберите товар мясо
Цена 90
Выберите товар

чек: 2 ; видов товара: 3 всего товаров: 4
гречка x2 : 28.0
рис x1 : 10.0
мясо x1 : 90.0
итоговая стоимость: 128.0
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
22.02.2019, 22:15
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
а какой признак последнего товара?
m0nte-cr1st0,

так а смысл?
разве это научит?
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
23.02.2019, 02:37
IRIP, не научит, увы, пока человек сам не начнёт пробовать..
эх... вспоминаю себя. проходил курсы на степике. был таким же. даже с первого курса гуглил задания. интересно будет через годик его же пройти
0
11 / 10 / 1
Регистрация: 02.03.2019
Сообщений: 16
04.04.2019, 21:46
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def add_item(itemName, itemCost):
    global count, b
    items.append(itemName + ' - ' + str(itemCost))
    count += itemCost
    b = True
 
 
def print_receipt():
    global count, numeration, items
    global b
    if b:
        if len(items) > 0:
            print('Чек {}. Всего предметов: {}'.format(numeration, len(items)))
        for element in items:
            print(element)
        print('Итого:', count)
        print('-----')
        count = 0
        numeration += 1
        items.clear()
    b = False
Работает
0
2 / 2 / 0
Регистрация: 25.10.2019
Сообщений: 3
02.04.2020, 14:47
names = []


def hello(name):
if None in query:
names.append(name)
number_in_queue = names.index(name)
query[number_in_queue] = name
print(f"Здравствуйте, {name}! Подойдите к окошку номер", number_in_queue + 1)
else:
print(f"Простите, {name}, все окна заняты.")


def search_card(name):
if None in query:
if name in base:
number_of_card = str((int(base.index(name))) + 1)
print('Ваша карта с номером ' + number_of_card + ' найдена')
else:
print('Ваша карта не найдена')
else:
print(f"Простите, {name}, дождитесь своей очереди")


def good_bye(name):
if name in names:
print(f"До свидания, не болейте, {name}")
else:
print(f"Простите, {name}, дождитесь своей очереди")
0
2 / 2 / 0
Регистрация: 05.05.2020
Сообщений: 31
09.05.2020, 16:10
глохнет если ввести только print_receipt()
0
 Аватар для Laimusp
12 / 12 / 1
Регистрация: 10.02.2021
Сообщений: 14
17.01.2022, 17:29
Вот этот код только что прошёл проверку, все робит


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
products = {}
numeration = 1
index_count = 0
 
 
def add_item(item_name, item_cost):
    global index_count
    products[index_count] = {item_name: item_cost}
    index_count += 1
 
 
def print_receipt():
    global numeration, products
    final_cost = 0
    if products:
        print(f"Чек {numeration}. Всего предметов: {len(products)}")
        for item in products.values():
            name, cost = list(item.items())[0]
            print(f"{name} - {cost}")
            final_cost += cost
        print(f"Итого: {final_cost}\n-----")
        numeration += 1
        products = {}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.01.2022, 17:29
Помогаю со студенческими работами здесь

Задача 5: Длинный плакат
Юный художник Вася нарисовал плакат с очень большим числом и решил повесить его на самую длинную стену школы. К сожалению, даже самая...

Длинный чек
Пожалуйста, если не сложно, в формате PEP8 Для работы небольшого магазинчика вас попросили сделать небольшой набор функций,...

Длинный чек
Здравствуйте, нужно написать программу по задаче: Для работы небольшого магазинчика вас попросили сделать небольшой набор функций,...

Чек
Помогите пожалуйста. Задание такое Нужно сделать новую функцию, которая возвращает одну или несколько строчек: Первая строка — левая...

Чек
Есть код, работает на всех компиляторах, которые я знаю, но 'компилятор - учитель' не пропускает. В чем проблема? Вот код: from...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru