Изучение языка программирования Python



Pdf көрінісі
бет11/14
Дата04.03.2023
өлшемі1,23 Mb.
#171016
1   ...   6   7   8   9   10   11   12   13   14
Байланысты:
python

Задача:
 
Требуется написать программу хранения и поиска данных о 
книгах в книжном магазине. О каждой книге известны: название, автор, 
количество, цена, номер зала, номер шкафа и номер полки.
Решение:
Для начала обозначим класс 
Book 
и в нем определим конструкцию 
данных о каждой книге, т.е. название, автор, количество, цена, номер зала, 
номер шкафа и номер полки.
class Book: 
def __init__(self, title = '', author = '', count = 0, price = 
0, place1 = 0, place2 = 0, place3 = 0): 
self.title = str(title)
#название
self.author = str(author)
#автор
self.count = int(count)
#количество
self.price = float(price)
#цена
self.place1 = int(place1)
#зал
self.place2 = int(place2)
#шкаф
self.place3 = int(place3)
#полка
Для вывода всех книг определим функцию
itemArrayPrint

зависящую от переменных 
pos
– «позиция», 
store – «книжный 
магазин» 
(объявим ее позже, после определения всех функций). 
def itemArrayPrint(pos, store): 
#Операторы подстановки. %s — строка, %d — десятичное число, %f 
— число с плавающей точкой.
Далее в скобках указаны переменные для 
подстановки 
print("|%s|%s|%d|%0.3f|%d|%d|%d|" % (store[pos].title, 
store[pos].author, store[pos].count, store[pos].price, 
store[pos].place1, store[pos].place2, store[pos].place3)) 
Для поиска определенной книги определим функцию 
findRecord

который заключается в циклическом переборе каждой записи в данном случае 
по автору. 
def findRecord(author, startSearchPos, store): 
current = startSearchPos 
while current < len(store) and store[current].author != 
author: 
current += 1 
return current 


24
Для вывода книги по автору определим функцию
printAuthorBooks
достаточно несколько раз вызвать функцию 
findRecord
, меня стартовую 
позицию и, в конечном счете, вывести на печать книгу нужного автора. 
def printAuthorBooks(author, store): 
pos = findRecord(author, 0, store) 
while pos < len(store): 
itemArrayPrint(pos, store) 
print(pos) 
pos = findRecord(author, pos + 1, store) 
Для удаления записи из массива на языке C++ потребовалась бы 
перестановка всех записей от удаляемой к началу, однако в Python списки и, 
значит, перемещать записи нет необходимости. Это происходит автоматически 
def deleteArrayItem(pos, store): 
try: 
del store[pos] 
#если не вышло удалить, значит элемента нет 
except IndexError: 
print("Нет такой книги") 
Объявляем «книжный магазин» пустым списком и как было ранее, 
наладим связь с пользователем, запустив цикл 
while True
, где и будем 
ссылаться на функции, определенные ранее: 
store = [] 
while True: 
#Ввод команды пользователем 
inp = input('d — удалить книгу\na — добавить книгу\ns — поиск 
книги\np — вывод всех книг\nq — выход\n') 
#Удаление книги по номеру
if inp == 'd': 
deleteArrayItem(int(input('Введите номер книги')), store) 
#Добавление книги 
elif inp=='a': 
store.append(Book(input("Название: "), input("Автор: "), 
input("Количество: "), input("Цена: "), input("Зал: "), 
input("Шкаф: "), input("Полка: "))) 
saveArray('test.txt', store)
else: 
print("Не добавлено, количество книг 1000") 
#Поиск и вывод книги по автору


25
elif inp == 's': 
printAuthorBooks(input("Автор: "),store) 
#Печать всех записей
elif inp == 'p': 
#Проверка, не пуст ли список 
if len(store): 
for i in range(len(store)): 
itemArrayPrint(i, store) 
else: 
print("Список пуст") 
#Выход из диалогового окна
elif inp=='q': 
break 


Достарыңызбен бөлісу:
1   ...   6   7   8   9   10   11   12   13   14




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет