Python 如何在文本文件上使用字符串方法?

Python 如何在文本文件上使用字符串方法?,python,python-2.7,Python,Python 2.7,我必须写一个我需要找到的程序 大写字母的数量 小写字母的数目 位数 空白字符数 在文本文件中,我的当前代码是 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

我必须写一个我需要找到的程序

  • 大写字母的数量

  • 小写字母的数目

  • 位数

  • 空白字符数

在文本文件中,我的当前代码是

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

但是,每当我尝试运行脚本时,它都会给我一个语法错误。有什么地方我做错了吗?

这里是解决语法错误的代码: 您在好几个地方漏掉了右括号

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

注意:这是您遇到的错误的唯一解决方案,由于您必须检查相同的逻辑问题,可能会出现任何其他错误。

这里是解决语法错误的代码: 您在好几个地方漏掉了右括号

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

注意:这是您遇到的错误的唯一解决方案,由于您必须检查相同的逻辑问题,可能会出现任何其他错误。

现在,您的
小写
函数中存在语法错误(您缺少函数调用
islower
)。但是,您的
main
函数也存在一些问题。现在,您只读取文件的一行。此外,您正在拆分该行(
split
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()

现在,您的
lowercase
函数中有一个语法错误(您缺少函数调用
islower
的参数)。但是,您的
main
函数也存在一些问题。现在,您只读取文件的一行。此外,您正在拆分该行(
split
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()


请发布错误跟踪。您的程序中有一个错误:无效语法。它突出显示def文本
islower
缺少一个括号您缺少几个打印语句末尾的右括号。请发布错误跟踪。您的程序中有一个错误:无效语法。它突出显示def text
islower
缺少一个括号您在几个打印语句的末尾缺少一个右括号。它为我成功执行,
(“小写字母:”,1)(“大写字母:”,0)(“数字:”,0)(“空格:”,0)
嗯,我认为您必须实际调用该函数,否则,它总是返回trueIt为我成功执行,
(“小写字母:”,1)(“大写字母:”,0)(“数字:”,0)(“空格:”,0)
嗯,我认为你必须实际调用函数,否则,它总是返回trueAh true,很好的调用@cricket\u 007,我是按照步骤思考的——用列表理解建立一个列表,然后求和。但是你是对的,你可以一起跳过整个列表步骤。这是一个生成器表达式,所以不需要构建列表。此外,我认为您的意思是“行中的
x
而不是测试中的”,您需要在打印声明中使用
%d
而不是
%s
,这是一个很好的调用-不是本地校对。再次感谢!而且%s仍然有效,使用%d有什么好处,因为它们肯定是整数?啊,没错,很好的调用@cricket_007,我在考虑步骤-使用列表理解构建一个列表,然后求和。但是你是对的,你可以一起跳过整个列表步骤。这是一个生成器表达式,所以不需要构建列表。此外,我认为您的意思是“行中的
x
而不是测试中的”,您需要在打印声明中使用
%d
而不是
%s
,这是一个很好的调用-不是本地校对。再次感谢!%s仍然可以工作,使用%d有什么好处,因为它们肯定是整数?