Подсчёт количества букв, цифр и специальных символов в введенной строке python

На вход программа получает строку, например, "fddfs456". Нужно вывести количество цифр, букв и специальных символов в формате: 3 5 2

stroke = input()
print(len([i for i in stroke if i.isdigit()]))
print(len([i for i in stroke if i.isalpha()]))

Не совсем понимаю, что значит это код и как подсчитать кол-во спецсимволов


Ответы (2 шт):

Автор решения: Tehnorobot

что значит это код и как подсчитать кол-во спецсимволов В данных строках:

print(len([i for i in stroke if i.isdigit()]))
print(len([i for i in stroke if i.isalpha()])) 

Эта конструкция ([i for i in stroke]) называется генератор. В нем вы отбираете в список те символы, которые удовлетворяют условию, указанному в генераторе. Метод isdigit() проверяет состоит ли строка из цифр, а isalpha() проверяет состоит ли строка из букв. Далее вы печатаете длину списков. Подробнее вы можете ознакомиться здесь. Я бы вам не рекомендовал начинать с генераторов, если вы не знаете работу словарей, списков, строк и их методов. Вот, вариант, понятный и, впринципе, удобный для записи:

string = '"fddfs456"'

d = {'Спец.символы': 0, 'Буквы': 0, 'Цифры': 0}
for i in string:
    if i.isalpha():
        d['Буквы'] += 1
    elif i.isdigit():
        d['Цифры'] += 1
    else:
        d['Спец.символы'] += 1

print(d['Цифры'], d['Буквы'], d['Спец.символы'])
→ Ссылка
Автор решения: SergFSM

компактный вариант:

s = 'fddfs456!+'

res = [len(list(filter(f,s))) for f in (str.isalpha,str.isdigit,(lambda x: not x.isalnum()))]

print(*res, sep=' ')  # 5 3 2
→ Ссылка