2015-12-07 5 views
0

Мне поручено подсчитывать прописные буквы в верхнем, нижнем регистре, цифрах и пробельных символах в файле .txt.Запишите прописные буквы, строчные буквы, цифры и пробелы в файле

Я пробовал это разными способами, и я не могу понять, как это правильно. Я не могу понять, где я.

Вот вывод, что я получаю:

Прописная отсчет 0 в нижнем регистре счетчик равен 0 Отсчет цифра 0 пробельных отсчет 0

Код:

def main(): 

    uppercase_count = 0 
    lowercase_count = 0 
    digits_count = 0 
    whitespace_count = 0 

    uppercase =['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'] 
    lowercase = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] 
    digits = ['0','1','2','3','4','5','6','7','8','9'] 
    whitespace = [' '] 

    infile = open("text.txt", "r") 

    data = infile.readlines() 

    for character in data: 
     if character in uppercase: 
      uppercase_count += 1 

    for character in data: 
     if character in lowercase: 
      lowercase_count += 1 

    for character in data: 
     if character in digits: 
      digits_count += 1 

    for character in data: 
     if character in whitespace: 
      whitespace_count += 1 

    print('The uppercase count is',uppercase_count) 
    print('The lowercase count is',lowercase_count) 
    print('The digit count is',digits_count) 
    print('The whitespace count is',whitespace_count) 

main() 

ответ

1
data = infile.read() 

Не читайте lines, но прочитайте файл как целую строку. Если вы читаете lin эс character будет line, но вы хотите, чтобы это было character

3

Вы можете просто использовать встроенные

многочисленные функции
for character in data: 
    if character.isupper(): 
     uppercase_count += 1 
    elif character.islower(): 
     lowercase_count += 1 
    elif character.isspace(): 
     whitespace_count +=1 
    elif character.isdigit(): 
     digit_count +=1 

Также может быть, вы могли бы использовать следующее, чтобы каждая строка посчитана для символов.

digit_count,whitespace_count,lowercase_count,uppercase_count=0,0,0,0 
lines = infile.readlines() 
for data in lines: 
    for character in data: 
     if character.isupper(): 
      uppercase_count += 1 
     elif character.islower(): 
      lowercase_count += 1 
     elif character.isspace(): 
      whitespace_count +=1 
     elif character.isdigit(): 
      digit_count +=1 
2

Вы построчно читать, не char, так что вы читали его в качестве целой строки через read, плюс это лучше сгруппировать все ваши for петли в один, таким образом:

data = infile.read() 

for character in data: 
    if character in uppercase: 
     uppercase_count += 1 

    elif character in lowercase: 
     lowercase_count += 1 

    elif character in digits: 
     digits_count += 1 


    elif character in whitespace: 
     whitespace_count += 1 

EDIT:

Кроме того, нет никаких оснований для вас, чтобы хранить все upper-case, lower-case, digits и white space символы в списках, как вы делали, используйте string модуль, который имеет все эти уже готовы:

>>> string.uppercase 
'ABCDEFGHIJKLMNOPQRSTUVWXYZ\x8a\x8c\x8e\x9f\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd8\xd9\xda\xdb\xdc\xdd\xde' 
>>> string.lowercase 
'abcdefghijklmnopqrstuvwxyz\x83\x9a\x9c\x9e\xaa\xb5\xba\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff' 
>>> string.whitespace 
'\t\n\x0b\x0c\r ' 

Лучший подход заключается в использовании встроенных методов:

ISUPPER(), ISLOWER() .. который вы можете проверить их here.

+1

Возможно использование встроенных функций, таких как isspace, islower, isupper, isdigit –

+0

Исправить @AkshayHazari .. Это еще лучше ... –

Смежные вопросы