Ответ 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
Я пытаюсь сделать функцию для определения количества цифр, букв, пробелов и других для строки. Вы знаете, что не так с моим кодом? и могу ли я улучшить свой код, чтобы быть более простым и точным?
спасибо! (вот пересмотренный код)
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
Вот еще один вариант:
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
Вы не должны устанавливать 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
Следующий код заменяет любой числовой символ на '', позволяя подсчитать количество таких символов с помощью функции 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
В коде есть 2 ошибки:
1) Вы должны удалить эту строку, так как она перекроет x в пустой список:
x = []
2) В первом выражении "if" вы должны отложить инструкцию "letter + = 1", например:
if x[i].isalpha():
letters += 1
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))
Игнорируя все, что может или не может быть правильным с вашим "пересмотренным кодом", проблема, вызывающая ошибку, указанную в вашем вопросе, вызвана вызовом функции "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)
, чтобы соответствовать текущему поведению, а также используя лучший стиль кодирования и явное представление о том, какой тип значения возвращается (в данном случае, кортеж).
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)
>>>
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