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