Как считать цифры, буквы, пробелы для строки в 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

12 ответов

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

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

В следующем коде любой символ nun-числовой заменяется на "", что позволяет подсчитать количество таких символов с помощью функции 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

Вы не должны устанавливать x = [], Это устанавливает пустой список для вашего введенного параметра. Кроме того, используйте питона 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

подсчет цифр или букв алфавита в строке

def iinn (): # блок для числовых строк

      b=(input("Enter numeric letter string "))

if b.isdigit():
    print (f"you entered {b} numeric string" + "\n")
            
else:
    
    letters = sum(c.isalpha() for c in b)
    print (f"in the string {b} are {letters} alphabetic letters")
    print("Try again...","\n")        
    

в то время как True: iinn ()

блок для числовых строк будет использовать инверсию, где -

числа = сумма (c.isdigit () для c в b)

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

  • 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) чтобы соответствовать текущему поведению, в то же время используя лучший стиль кодирования и четко указывать, какой тип значения возвращается (в данном случае, кортеж).


# Write a Python program that accepts a string and calculate the number of digits 
# andletters.

    stre =input("enter the string-->")
    countl = 0
    countn = 0
    counto = 0
    for i in stre:
        if i.isalpha():
            countl += 1
        elif i.isdigit():
            countn += 1
        else:
            counto += 1
    print("The number of letters are --", countl)
    print("The number of numbers are --", countn)
    print("The number of characters are --", counto)

Если вам нужно простое решение, используйте понимание списка, а затем получите len этого списка:

      len([ch for ch in text if ch.isdigit()])

Это можно применить к isalpha() аналогичным образом.

Это ошибка твоего призвания. Вы вызываете код с аргументом (asdfkasdflasdfl222)который интерпретируется как переменная. Однако вы должны называть его строкой "asdfkasdflasdfl222".

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)
>>>

Есть 2 ошибки в этом коде:

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

x = []

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

if x[i].isalpha():
    letters += 1
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  

ВВОД:

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

Другие вопросы по тегам