Поиск цифр в строке. Python
Задание:
Вывести все четные цифры (без повторений), которые содержатся во всех словах и количество слов.
Найти и вывести в самом длинном слове все символы , отличные от заглавных латинских букв.
Код:
import string
text = input('Введите строку: ') # ввод символов с клавиатуры
print('Вы ввели: {}'.format(text))
words = text.split()
#найдем все четные цифры без повторений
mass = []
for elem in words:
if elem % 2 == 0:
mass.append(elem)
print('Цифры:', mass)
#подсчитаем количество слов
print('Количество слов: {}'.format(len(words)))
# найдем самое длинное слово
longest_word = max(words,key = len)
print('Самое длинное слово: {}'.format(longest_word))
# удаляем заглавные латинские буквы из самого длинного слова
for ch in longest_word:
if ch in string.ascii_uppercase:
longest_word = longest_word.replace(ch,'')
print('Самое длинное слово после удаления заглавных латинских букв: {}'.format(longest_word))
Проблема:
Выдает ошибку в 9 строке. В остальном работает. Не может найти цифры. Подскажите, как правильно считать строку поэлементно?
Ответы (1 шт):
Решение достаточно простое и ошибка, как указывалось в комментариях от того, что вы пытаетесь разделить по остатку переменную с типом данных string. Все что необходимо вам так это проверить: "Является, ли, элемент списка числом?". Для этого можно применить метод isdisgit(). Примерно будет выглядеть так:
>>> text = "jdføso 780 hsafp9 934 7384 iukdf" # тестовая строка
>>> words = text.split()
>>> mass = set()
>>> for elem in words:
>>> if elem.isdigit():
>>> print(f"Какой же тип данных у {elem}. Ответ {type(elem)}") # посмотрим на тип данных здесь
>>> if int(elem) % 2 == 0:
>>> mass.add(elem)
>>> print('Цифры:', mass)
Какой же тип данных у 780. Ответ <class 'str'>
Какой же тип данных у 934. Ответ <class 'str'>
Какой же тип данных у 7384. Ответ <class 'str'>
Цифры: {'780', '934', '7384'}
mass - переменную я определил тип данных как set, что дает нам уникальные значения для конечного результата. Проверим:
>>> text = "jdføso 780 hsafp9 934 7384 iukdf 934" # тестовая строка
...
...
>>> Цифры: {'934', '7384', '780'}
Это исправление вашего решения, но я вчитался еще раз в задание и понимаю, что вам надо найти все четные цифры, а не числа. В том числе и которые содержатся в словах. Можно решить вот так:
>>> import re
>>>
>>> text = "jdføso 780 hsafp9 934 7384 iukdf 934"
>>> mass = set()
>>> pattern = r"\d"
>>> all_digits = set(re.findall(pattern, text))
>>> for item in all_digits:
>>> if int(item) % 2 == 0:
>>> mass.add(item)
>>> print(f"Цифры: {mass}")
Цифры: {'8', '0', '4'}