2016-05-05 2 views
0

я должен написать программу, где нужно найтиКак использовать строковые методы в текстовых файлах?

  • количество заглавных букв

  • количество строчных букв

  • количество цифр

  • в число пробельных символов

в текстовом файле, и мой текущий код

def lowercase(line_list): 

    print("Lower case Letters: ", sum(1 for x in line_list if x.islower)) 


def uppercase(line_list): 

    print("Upper case Letters: ", sum(1 for c in line_list if c.isupper()) 



def numbers(line_list): 

    print("Numbers: ", sum(1 for b in line_list if b.isdigit()) 


def whitespace(line_list): 

    print("Spaces: ", sum(1 for y in line_list if y.isspace()) 


def main(): 

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

    line = in_file.readline() 

    line_list = line.split() 

    lowercase(line_list) 

    uppercase(line_list) 

    numbers(line_list) 

    whitespace(line_list) 

    in_file.close() 


main() 

Однако всякий раз, когда я пытаюсь запустить скрипт, дает мне ошибку синтаксиса. Есть ли что-то, что я делаю неправильно?

+1

Просим выслать сообщение об ошибке – tknickman

+0

В вашей программе есть недопустимый синтаксис. Он выделяет текст def – Carl

+0

'islower' отсутствует скобка –

ответ

2

Прямо сейчас у вас есть синтаксическая ошибка в вашей функции lowercase (вам не хватает пароля для вызова функции islower). Тем не менее, ваша функция main также имеет некоторые проблемы. Прямо сейчас вы читаете только одну строку файла. Кроме того, вы разделяете эту строку (split по умолчанию разделяет пробел, поэтому вы теряете пробелы, которые вы пытаетесь подсчитать). Если вы пытаетесь прочитать все это, а не одну строку. Попробуйте следующее:

def main(): 
    lower_case = 0 
    upper_case = 0 
    numbers = 0 
    whitespace = 0 
    with open("text.txt", "r") as in_file: 
     for line in in_file: 
      lower_case += sum(1 for x in line if x.islower()) 
      upper_case += sum(1 for x in line if x.isupper()) 
      numbers += sum(1 for x in line if x.isdigit()) 
      whitespace += sum(1 for x in line if x.isspace()) 

    print 'Lower case Letters: %s' % lower_case 
    print 'Upper case Letters: %s' % upper_case 
    print 'Numbers: %s' % numbers 
    print 'Spaces: %s' % spaces 


main() 
+0

Ах, правда, хороший звонок @ cricket_007, я думал о шагах - создайте список используя понимание списка, а затем суммируйте это. Но вы правы - вы можете пропустить весь шаг списка все вместе. – tknickman

+1

Это выражение генератора, поэтому нет необходимости создавать список. Кроме того, я думаю, что вы имели в виду 'x in line', а не в тесте –

+0

И вам нужно'% d' вместо '% s' в ваших операторах печати –

0

Здесь код, где были устранены синтаксические ошибки: Вы пропустили закрытие круглых скобок в нескольких местах.

def lowercase(line_list): 

    print("Lower case Letters: ", sum(1 for x in line_list if x.islower)) 


def uppercase(line_list): 

    print("Upper case Letters: ", sum(1 for c in line_list if c.isupper())) 


def numbers(line_list): 

    print("Numbers: ", sum(1 for b in line_list if b.isdigit())) 


def whitespace(line_list): 

    print("Spaces: ", sum(1 for y in line_list if y.isspace())) 


def main(): 

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

    line = in_file.readline() 

    line_list = line.split() 

    lowercase(line_list) 

    uppercase(line_list) 

    numbers(line_list) 

    whitespace(line_list) 

    in_file.close() 

main() 

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

+0

'x.islower' еще ошибка –

+0

Она выполнена успешно для меня, ' ('строчными буквами:', 1) ('Верхний регистр букв:', 0) ('Числа:', 0) ('Spaces:', 0) ' – Murali

+1

Хм, я думаю, вы должны называть функцию, в противном случае она всегда возвращает true –