4

Сам не так давно начал питон, немного не понимаю почему он не ищет мне слова и вообще ничего не выводит.

Задание такое: Дан набор слов, разделенных точкой с запятой (;). Набор заканчивается двоеточием (:). Определить, сколько в нем слов, заканчивающихся буквой а.

Мой код, помогите доделать до конца)

string = "Добро;Зло;Земля;Игра;Машина:"
i = 0
k = 0
while i == 1:
    len(string) - 1
    if string[i]== "а" and string[i+1] == ";" or string[i+1] == ":":
        k=k+1
        print(k)

Вроде уже лучше стало, но результат не совсем правильный вроде

string = "Добро;Зло;Земля;Игра;Машина;Куша:"
i = 0
k = 0
for i in range(len(string)-1):
    if string[i] == "а" and string[i+1] == ";" or string[i+1] == ":":
        k = k+1

print(k)
  • Может хотя бы добавите что выводит ваш код и скажите в чём именно проблема? – MrModest Dec 19 '18 at 19:08
  • Он либо ничего не выводит либо выводит k, проблема в том что я не понимаю правильно ли построил алгоритм для задания, цифры он даёт правильные, что-то меняю уже не корректные. Нужно проще говоря найти все слова заканчивающиеся на букву а – SuriKila Dec 19 '18 at 19:09
  • 1
    А вообще, советовал бы вам сначала разбить вашу строку на массив строк, согласно разделителю. А потом уже у каждой строки проверять последний символ. – MrModest Dec 19 '18 at 19:09
  • Для меня это звучит сложновато) не так давно только с паскаля перехал – SuriKila Dec 19 '18 at 19:11
  • попробуйте тогда написать это сначало на паскале – MrModest Dec 19 '18 at 19:11
  • На паскале уже написал, там всё работает, в питоне отчасти – SuriKila Dec 19 '18 at 19:16
  • Для чего эта строчка - len(string) - 1? Так нельзя - for i in range(len(string)-1). Когда дойдет до последнего символа, вылетит с ошибкой, т.к. элемент [i+1] будет отсутствовать. – Эникейщик Dec 19 '18 at 19:23
  • Чтобы перебирать каждое слово и там уже искать последнию букву, получается в каждом слове я нахожу а , если туда прибовляю+1 то ловлю двоеточие или точку с запятой и по новой прохожу, записывая всё в K. Мне кажется алгоритм у меня возможно корректный а вот задать цикл мне сложно в питоне после паскаля, тут ругается на int и прочее постоянно – SuriKila Dec 19 '18 at 19:31
  • Как мне тогда задать? я хочу что-то примерно for i:=2 to length(string) do – SuriKila Dec 19 '18 at 19:33
  • Есть такая штука как str.endswith() – Pavel Durmanov Dec 24 '18 at 20:55

4 Answers4

4
string = "Добро;Зло;Земля;Игра;Машина:"
words = []
i = 0 #счётчик для обхода входной строки
while i < len(string) and string[i] != ":": #проходим, пока не дойдём до знака конца
    word = "" #временная переменная для заполнения слова
    while i < len(string) and string[i] != ";" and string[i] != ":": #заполняем слово, пока не встретим знак конца слова (или всего ввода)
        word += string[i]
        i =  i + 1
    words.append(word) #когда встретим знак конца слова, выйдем из цикла и занесём завершённое слово в массив
    i = i + 1 #игнорируем ";"
k = 0
for word in words:
    if word[len(word)-1] == 'а':
        k = k + 1
print(k)

Проверка на len(string), чтобы не вылететь за пределы массива. Возможно есть решение элегантнее, но на больную голову ничего лучше не придумывается

MrModest
  • 1,364
2

Можно использовать регулярное выражение:

string = "Добро;Зло;Земля;Игра;Машина:"
print(len(re.findall(r'а;|а:', string)))
>>2

Здесь мы ищем все вхождения символа "а" с точкой с запятой или двоеточием.

Elefanobi
  • 141
1
string = "Добро;Зло;Земля;Игра;Машина:"
print(string.count('а;') + string.count('а:'))
>>2
user421198
  • 11
  • 1
1
string = "Добро;Зло;Земля;Игра;Машина:"

len([ i for i in string[:-1].split(";") if i[-1]=='а'])
2
S. Nick
  • 74,889
  • зачем же вы человеку готовый и сжатый ответ даёте, если ему разобраться в алгоритме надо? у него ж там какое-то задание. возможно особенностями языка даже пользоваться нельзя по условию) – MrModest Dec 19 '18 at 20:18