Как подсчитать цифры, буквы, пробелы для строки в Python

Я пытаюсь сделать функцию для определения количества цифр, букв, пробелов и других для строки. Вы знаете, что не так с моим кодом? и могу ли я улучшить свой код, чтобы быть более простым и точным?

спасибо! (вот пересмотренный код)

def count(x):
    length = len(x)
    digit = 0
    letters = 0
    space = 0
    other = 0
    for i in x:
        if x[i].isalpha():
            letters += 1
        elif x[i].isnumeric():
            digit += 1
        elif x[i].isspace():
            space += 1
        else:
            other += 1
    return number,word,space,other

он показал эту ошибку:

>>> count(asdfkasdflasdfl222)
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    count(asdfkasdflasdfl222)
NameError: name 'asdfkasdflasdfl222' is not defined

Ответ 1

Вот еще один вариант:

s = 'some string'

numbers = sum(c.isdigit() for c in s)
words   = sum(c.isalpha() for c in s)
spaces  = sum(c.isspace() for c in s)
others  = len(s) - numbers - words - spaces

Ответ 2

Вы не должны устанавливать x = []. Это устанавливает пустой список для введенного параметра. Кроме того, используйте синтаксис python for i in x следующим образом:

for i in x:
    if i.isalpha():
        letters+=1
    elif i.isnumeric():
        digit+=1
    elif i.isspace():
        space+=1
    else:
        other+=1

Ответ 3

Следующий код заменяет любой числовой символ на '', позволяя подсчитать количество таких символов с помощью функции len.

import re
len(re.sub("[^0-9]", "", my_string))

По алфавиту:

import re
len(re.sub("[^a-zA-Z]", "", my_string))

Подробнее - https://docs.python.org/3/library/re.html

Ответ 4

В коде есть 2 ошибки:

1) Вы должны удалить эту строку, так как она перекроет x в пустой список:

x = []

2) В первом выражении "if" вы должны отложить инструкцию "letter + = 1", например:

if x[i].isalpha():
    letters += 1

Ответ 5

s=input("Enter the string: ")
small_letter=0
capital_letter=0
digits=0
space=0
others=0
x=len(s)
for i in range(0,x,1):
    if ((ord(s[i]) >= 97) and (ord(s[i]) <= 122)):
        small_letter=small_letter+1
    elif ((ord(s[i]) >= 65) and (ord(s[i]) <= 90)):
        capital_letter+=1
    elif ((ord(s[i]) >= 48) and (ord(s[i]) <= 57)):
        digits+=1
    elif (ord(s[i])==32):
        space+=1
    else:
        others+=1
print("small letter: %d \n capital letter: %d \n digits: %d \n space: %d \n others: %d \n" %(small_letter,capital_letter,digits,space,others))

Ответ 6

Игнорируя все, что может или не может быть правильным с вашим "пересмотренным кодом", проблема, вызывающая ошибку, указанную в вашем вопросе, вызвана вызовом функции "count" с переменной undefined, потому что вы не укажите строку.

  • count(thisisastring222) ищет переменную с именем thisisastring222, чтобы перейти к функции, называемой count. Чтобы это сработало, вам нужно было бы определить переменную раньше (например, с помощью thisisastring222 = "AStringWith1NumberInIt."), тогда ваша функция будет делать то, что вы хотите, с содержимым значения, хранящегося в переменной, а не с именем переменной.
  • count("thisisastring222") помещает в вызов строку "thisisastring222", что означает, что функция count будет работать с точной переданной ей строкой.

Чтобы исправить ваш вызов вашей функции, просто добавьте кавычки вокруг asdfkasdflasdfl222, изменив count(asdfkasdflasdfl222) на count("asdfkasdflasdfl222").

Что касается фактического вопроса "Как подсчитать цифры, буквы, пробелы для строки в Python", то с первого взгляда остальная часть "исправленного кода" выглядит нормально, за исключением того, что обратная строка не возвращает те же переменные, что и вы 'используется в остальной части кода. Чтобы исправить это, не изменяя ничего в коде, измените number и word на digit и letters, сделав return number,word,space,other в return digit,letters,space,other или еще лучше return (digit, letters, space, other), чтобы соответствовать текущему поведению, а также используя лучший стиль кодирования и явное представление о том, какой тип значения возвращается (в данном случае, кортеж).

Ответ 7

def match_string(words):
    nums = 0
    letter = 0
    other = 0
    for i in words :
        if i.isalpha():
            letter+=1
        elif i.isdigit():
            nums+=1
        else:
            other+=1
    return nums,letter,other

x = match_string("Hello World")
print(x)
>>>
(0, 10, 2)
>>>

Ответ 8

sample = ("Python 3.2 is very easy") #sample string  
letters = 0  # initiating the count of letters to 0
numeric = 0  # initiating the count of numbers to 0

        for i in sample:  
            if i.isdigit():      
                numeric +=1      
            elif i.isalpha():    
                letters +=1    
            else:    
               pass  
letters  
numeric  

Ответ 9

ВВОД:

1

26

sadw96aeafae4awdw2 wd100awd

import re

a=int(input())
for i in range(a):
    b=int(input())
    c=input()

    w=re.findall(r'\d',c)
    x=re.findall(r'\d+',c)
    y=re.findall(r'\s+',c)
    z=re.findall(r'.',c)
    print(len(x))
    print(len(y))
    print(len(z)-len(y)-len(w))

ВЫХОД:

4

1

19

Четыре цифры: 96, 4, 2, 100 Количество пробелов = 1 количество букв = 19