#python #loops
#питон #петли #python #циклы
Вопрос:
Я полный новичок в программировании, так что извините за невежество. Я беру MOOC и ни за что на свете не могу понять, какие шаги предпринять, чтобы решить эту проблему:
Предположим, что s — это строка символов нижнего регистра.
Напишите программу, которая выводит количество раз, когда строка ‘bob’ встречается в s. Например, если s = ‘azcbobobegghakl’, то ваша программа должна напечатать
Количество раз, когда происходит боб, равно: 2
ОК. Я знаю, что цикл for необходим. Я думаю, что это должно начаться с:
x=bob
count=0
for count in range(s):
>if
Здесь я не уверен, как извлечь конкретное слово ‘bob’ из индекса, и я знаю, что мне нужно ввести count = 1, но не уверен, где. Не мог бы кто-нибудь, пожалуйста, помочь мне? Я уверен, что мог бы решить это сам, но через несколько часов я расстраиваюсь!
Комментарии:
1. Вы
ll need
используете range(len (s))` вместоrange(s)
, посколькуs
это не целое число. Затем используйтеx == s[count : count len(x)]
.2. Ага! Я подумал, что мне, возможно, придется преобразовать str в int. Спасибо, босс.
3. Нужно ли мне после этого вставлять мои операторы if? Я все еще не уверен, как начать эти следующие инструкции if.
4. Вам не нужно вкладывать какие-либо операторы if. Подумайте об этом так. Когда вы смотрите на строку
s
, откуда вы знаете, что слово вx
началось? Теперь, когда вы знаете, что это началось, как вы узнаете, что это закончилось?5. Я серьезно зашел в тупик. Нужно ли мне переопределять x сейчас? Я не уверен, как изолировать значение отдельной буквы. Нужно ли мне вообще использовать оператор if? Вот что у меня есть сейчас:
for x in range(len(s)): >x==s[count:count lensx)]
Ответ №1:
# our input variables:
term = 'bob'
s = 'azcbobobegghakl'
# where I store count of found search term:
count = 0
# we are going from 0 to length of input string:
for i in range(len(s)):
# compare the slice from <current index> to <current index length of search term> to search term
if s[i:i len(term)] == term:
# it there's match, increase the count
count = 1
print(count)
С принтами:
2
Ответ №2:
Итак, вот мое решение:
s = 'azcbobobegghakl'
x = 'bob'
count = 0
for i in range(len(s)):
if x == s[i : i len(x)]:
count = 1
print(count)
Несколько вещей, на которые следует обратить внимание. Прежде всего, в вашем for
заявлении было несколько ошибок, когда вы используете переменную count
перед инструкцией, но также создаете новую переменную count
в инструкции for , и поэтому я заменил ее в инструкции именем переменной i
, чтобы она не переопределяла вашу первую count
переменную. Во-вторых, это должно быть range(len(s))
как s
строка, и вы захотите выполнить итерацию до ее длины.
Наконец, чтобы объяснить if x == s[i : i len(x)]:
часть, нужно посмотреть, совпадает ли X с i-й позицией в S вместе со следующими 2 буквами в S, потому что длина X (‘bob’) равна 3, поэтому вам нужно будет просматривать каждую len(x)
или три буквы в s
строке.
Ответ №3:
Я сделал что-то вроде этого, я почти уверен, что кто-то может оптимизировать код, я просто попробовал быстрый. Пока это работает.
keyword = "bob"
text = "azcbobobegghakl"
n = len(keyword)
temp = ""
counter = 0
for x in (text):
temp = x
if len(temp)%(n 1) == 0:
temp = temp[1::]
if keyword in temp:
counter = 1
print(counter)
Комментарии:
1. Спасибо. Кажется, это работает, но в нескольких случаях почему-то не хватает только одного «боба», например: ожидалось, что ‘bobobobobobobobobobobobobobobobobobob’ 10. Я буду использовать ваш ответ, поскольку я ни за что на свете не мог понять, как решить эту проблему. Какие-либо советы или ресурсы для практики и получения дополнительной информации об этом? Большинство руководств не предоставляют больше информации, чем лекция.
2. пойдите для этого, я не понял, что да, это правда, в нем отсутствует первый боб. Я думаю HackerRank.com это отличное место для практики программирования. Я пользуюсь им время от времени.
Ответ №4:
Просто предложение для завершения уже данных ответов.
Вероятно, вы могли бы начать с проверки, существует ли строка, которую вы ищете, 'bob'
в строке для поиска, s
например:
s = 'azcbobobegghakl'
if 'bob' in s:
# your searching algotithm
Ответ №5:
Это также может сработать
s = 'azcbobobegghakl'
x = 'bob'
count = 0
for i in range(len(s)):
if s[i:].startswith(x):
count = 1