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

Не считается количество вхождений строки в список

12.11.2016, 17:16. Показов 1365. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть функция для выдачи книг в библиотеке:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def books_delivery(self):
        self.read_file_visitors()
        c = int(input('Выбрать номер посетителя: '))
        self.read_file_books()
        q = int(input('Выбрать номер книги: '))
        
        if int(self.list_name_book.count(self.visitors_list[c])) < 3:
            nb = Name_Books(self.visitors_list[c], self.books_list2[q])
            self.list_name_book.append(nb)
            self.books_list2.pop(q)
            pickle.dump(self.books_list2, open('books_list2.txt', 'wb'))
        else:
            print('У посетителя',self.visitors_list[c],'уже есть три книги, больше нельзя!')
Не работает count, подозреваю, что причина тому, представление списка list_name_book в виде вот такой прелести [<Model.Name_Books object at 0x000000000360FEB8>]
Класс:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Name_Books:
    def __init__ (self, n, b):
        self.name = ''
        self.book = ''
        self.show()
        self.entry(n, b)
    
    def __str__ (self):
        return str(self.name) + ' ' + str(self.book)
    
    def entry (self, n, b):
        self.name = n
        self.book = b
 
    def show (self):
        print(self.name, self.book)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.11.2016, 17:16
Ответы с готовыми решениями:

Строки. Даны строки S и So. Найти количество вхождений строки So в строку S
Помогите пожалуйста, как сделать эту задачу без этих вот строчек... B:=TRUE; и без команды INC... Вот условие задачи: Даны строки S и...

Количество вхождений числа в список
Написать функцию odd_numbers, которая получает на вход список целых чисел arr и целое число n и возвращает список, состоящий из n последних...

Подсчитать количество вхождений элемента Е в список Р
Написать функцию/процедуру, которая: а)подсчитывает количество вхождений элемента Е в список Р; б)удваивает каждое вхождение элемента Е...

8
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
12.11.2016, 19:37
Судя по предыдущей теме, в visitors_list лежат объекты Visitor, а не строки. Даже если бы там лежали строки, нигде в коде не сказано, как интерпритатор должен сравнивать между собой строку и Name_Books. В данном случае лучше просто пройтись по list_name_book, и посчитать сколько list_name_book.name совпадает с visitors_list[c].name (ведь они должны сравниваться?), для примера
Python
1
if sum(nb.name == self.visitors_list[c].name for nb in self.list_name_book) < 3
0
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 30
12.11.2016, 20:46  [ТС]
Да, имена надо сравнивать. Ничего не изменилось, он не сравнивает. А как сказать интерпретатору, чтобы он сравнивал строку с Name_Books? И я не очень поняла пример, попробовала сравнить list_name_book.name и visitors_list[c].name с счетчиком, но счетчик остается нулем.
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
12.11.2016, 21:01
Строку 7 в Вашем коде замените на мой пример
0
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 30
12.11.2016, 21:09  [ТС]
Написала проверку:
Python
1
2
3
4
5
nb = Name_Books(self.visitors_list[c], self.books_list2[q])
        self.list_name_book.append(nb)
        for nb in self.list_name_book:
            if nb.name == self.visitors_list[c]:
                print('hello')
hello печатает, то есть условие выполняет, но, если добавить несколько объектов с одинаковым именем, должно по идее столько же раз должно быть выведено это hello, а выводит один раз.

Добавлено через 3 минуты
Это я сделала первым делом, но все осталось, как прежде, 4-й объект с тем же именем добавляется
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
12.11.2016, 21:42
Цитата Сообщение от -Anna- Посмотреть сообщение
Python
1
nb = Name_Books(self.visitors_list[c], self.books_list2[q])
не заметил...

В Name_Books в self.name и self.book должны же быть строки? Если да, то, должно быть, наверное, так
Python
1
nb = Name_Books(self.visitors_list[c].name, self.books_list2[q].book)
0
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 30
13.11.2016, 14:54  [ТС]
Добавила, теперь выводит, сколько надо hello. И со строчкой, которую Вы вначале посоветовали тоже все отлично) спасибо огромное!

Добавлено через 15 часов 13 минут
Могу Вам еще вопрос задать: как мне вытащить из списка list_name_book книгу и положить в books_list2?
Вариант был такой, но он не работает:
Python
1
2
q = int(input('Введите номер книги, которую нужно вернуть: '))
self.books_list2.append(self.list_name_book[q].book)
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
13.11.2016, 15:02
Насколько я понял
Python
1
self.books_list2.append(self.list_name_book[q])
0
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 30
13.11.2016, 15:42  [ТС]
Но в таком случае он почему-то очищает список books_list2 и добавляет имя с книгой, а должен только книгу. В books_list2 у меня хранятся книги, объекты класса Book

Добавлено через 13 минут
Так, я неправильно делала, не выгружала этот список из файла. Теперь все-таки проблема осталась, добавляется объект, но добавляется и имя, и книга, можно как-то одну книгу вытащить? Если пытаться, как я выше писала, то пишет ошибку, что объект 'str' не имеет метода 'show', почему он сразу преобразуется в str не могу понять если пытаться вытащить книгу?

Добавлено через 18 минут
Проблему решила) нет пока больше вопросов)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.11.2016, 15:42
Помогаю со студенческими работами здесь

Найти количество вхождений подсписка в список
Найти количество вхождений подсписка в список. Например список (1 2 3) в списке (1 2 3 5 9 4 1 2 3 5 9 1 2 3), встречается 3 раза, число...

С клавиатуры вводится строка, в ней и+1 меняется с и-1 элементом, считается количество таких перестановок, после этого считается сумма всех четных си
Дорогие форумчане, вы не раз мне помогали в решении проблем, но сегодня проблема, с которой я столкнулся для меня оказалась нерешима. С...

Строки. Подсчитать количество вхождений первого символа строки в другую строку
Помогите решить. Условие: Подсчитать количество вхождений первого символа строки в другую строку. Вывести саму строку и результат...

Даны две строки: S и S0. Определить количество вхождений строки S0 в строку S
Даны две строки: S и S0. Определить количество вхождений строки S0 в строку S.

Даны две строки: S1 и S2. Определить количество вхождений строки S2 в строку S1
Даны две строки: S1 и S2. Определить количество вхождений строки S2 в строку S1.


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru