На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

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

АвторСообщение





Сообщение: 1
ссылка на сообщение  Отправлено: 17.04.21 09:01. Заголовок: find и count


Добрый день!
Помогите разобраться, почему ответы при использовании find и count различны. Исходный файл в 24 задании - 24-J4.txt
Всем заранее СПАСИБО!
Александр.
 with open("c:\24-J4.txt", "r") as f: 
s = f.readline().rstrip()

k = 0; k1 = 0
while True :
k2 = s.find('BOSS',k1)
if k2<0 : break
k+=1
k1 = k2+1
print(k,s.count('BOSS'))

# 3917 3917

k = 0; k1 = 0
while True :
k2 = s.find('BOSSB',k1)
if k2<0 : break
k+=1
k1 = k2+1
print(k,s.count('BOSSB'))

# 920 919 - как можно это объяснить?

k = 0; k1 = 0
while True :
k2 = s.find('BOSSBS',k1)
if k2<0 : break
k+=1
k1 = k2+1
print(k,s.count('BOSSBS'))

# 229 229


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 11 [только новые]







Сообщение: 2
ссылка на сообщение  Отправлено: 17.04.21 09:03. Заголовок: Дополню - Python 3.4..


Дополню - Python 3.4.3

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Сообщение: 2711
ссылка на сообщение  Отправлено: 17.04.21 09:55. Заголовок: Осипкин пишет: k =..


Осипкин пишет:

 цитата:
 k = 0; k1 = 0  
while True :
k2 = s.find('BOSSB',k1)
if k2<0 : break
k+=1
k1 = k2+1
print(k,s.count('BOSSB'))


# 920 919 - как можно это объяснить? Пусть s = 'BOSSBOSSB'. Очевидно, что подстрока 'BOSSB' тут встречается 1 раз. По вашему алгоритму в цикле второй раз поиск выполняется в строке 'OSSBOSSB' и мы находим вторую такую подстроку (ее считать не нужно, потому что она перекрывается с первой). Если написать k1 = k2 + 5 (длина 'BOSSB'), то все работает правильно.

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 3
ссылка на сообщение  Отправлено: 17.04.21 10:33. Заголовок: Я считаю, что в Ваше..


Я считаю, что в Вашем примере подстрока 'BOSSB' встречается 2 раза, с 0-й позиции и с 4-й позиции.
Да, такая подстрока ("BOSSBOSSB") встречается один раз в Вашем файле.
А если считать как Вы, то тогда, мне кажется, ответ в Вашем примере неправильный. Должен быть 2197 (вместо 2198).

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 4
ссылка на сообщение  Отправлено: 17.04.21 11:10. Заголовок: Спасибо большое! Я ..


Спасибо большое!
Я понял главное - как работает count.
Например, в последовательности "мамамама' я бы нашел 3 подпоследовательности 'мама', count находит только две...
Вот так он работает!
Просто, если в Вашей задаче подсчитать, используя count сумму s.count(*BOSS*), где под "*" подразумеваются буквы B,O,S, то получим ответ 2197.
Я бы тему закрыл. Еще раз спасибо!
Александр.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Сообщение: 2712
ссылка на сообщение  Отправлено: 17.04.21 15:45. Заголовок: Осипкин пишет: в Ваш..


Осипкин пишет:
 цитата:
в Вашем примере подстрока 'BOSSB' встречается 2 раза, с 0-й позиции и с 4-й позиции

А это смотря что нам нужно. Главное - сначала договориться, учитываем ли мы перекрывающиеся строки.
 цитата:
А если считать как Вы, то тогда, мне кажется, ответ в Вашем примере неправильный. Должен быть 2197 (вместо 2198).

Не понял почему.
 цитата:
подсчитать, используя count сумму s.count(*BOSS*), где под "*" подразумеваются буквы B,O,S, то получим ответ 2197

Почему так нужно считать? Вот решение, которое есть на сайте:
 print(s.count('BOSS') - s.count('JBOSS') - s.count('BOSSJ') + s.count('JBOSSJ'))
Здесь есть ошибка?

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 6
ссылка на сообщение  Отправлено: 18.04.21 14:39. Заголовок: Добрый день! А в чем..


Добрый день!
А в чем ошибка в моем алгоритме? Необходимо рассмотреть последовательности:
-BOSS (в начале строки и после слова нет буквы J)
-BOSS (в конце строки и перед словом нет буквы J)
Эти два варианта отбросим, т.к. визуально видно, что таких случаев нет!
-BOSS в середине строки, причем в одном из девяти видов BBOSSВ, BBOSSO, BBOSSS, OBOSSВ, OBOSSO, OBOSSS,SBOSSВ, SBOSSO, SBOSSS. И в этом случае посчитать сумму COUNT-ов этих девяти вариантов. И ответ будет 2197.
Где у меня ошибка в рассуждениях?
А вывод - надо аккуратно использовать стандартные функции! И в результате я выяснил, как работает COUNT.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Сообщение: 2715
ссылка на сообщение  Отправлено: 18.04.21 20:35. Заголовок: Осипкин пишет: BOSS ..


Осипкин пишет:
 цитата:
BOSS в середине строки, причем в одном из девяти видов BBOSSВ, BBOSSO, BBOSSS, OBOSSВ, OBOSSO, OBOSSS,SBOSSВ, SBOSSO, SBOSSS.

Как все это связано с условием задачи? Там же сказано только о том, что до и после слова не должно быть буквы J.

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 7
ссылка на сообщение  Отправлено: 18.04.21 14:40. Заголовок: А к Вашей программе ..


А к Вашей программе у меня замечаний нет...

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 9
ссылка на сообщение  Отправлено: 20.04.21 05:18. Заголовок: Дважды два не только..


Дважды два не только четыре, но и без пяти трижды три. Георгий Александров.
Т.е. Вы считаете, что задачу можно решать только одним способом? Но, если следовать Вашей логике, не получится ли, что в задаче 156, если найдена подстрока AAAA*F, то это всего одна подстрока, а не четыре?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Сообщение: 2725
ссылка на сообщение  Отправлено: 20.04.21 13:46. Заголовок: Осипкин пишет: Т.е. ..


Осипкин пишет:
 цитата:
Т.е. Вы считаете, что задачу можно решать только одним способом?

Никак нет. Тут ведь всегда - как договоримся. Какой вариант будем использовать.

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 424
ссылка на сообщение  Отправлено: 20.04.21 13:55. Заголовок: Если рассмотреть стр..


Если рассмотреть строку AAAABF то AF подстрок 4 штуки.
Проблема пересекающихся подстрок есть, думается мне что по умолчанию пересекающиеся подстроки должны быть учтены полностью (по задумке, что мы рассматриваем каждую подстроку как ОТДЕЛЬНЫЙ элемент, без контекста других подстрок). Если конечно не указано иного дополнительно.

Discussio mater veritas est Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 1111
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет