0

我正在使用 Python (3.x) 为作业创建一个简单的程序。它需要一个多行输入,如果有多个连续的空格,它会删除它们并用一个空格替换它。[这是最简单的部分。] 它还必须打印整个输入中最连续空白的值。

例子:

input = ("This is   the input.")

应该打印:

This is the input.
3

我的代码如下:

def blanks():
    #this function works wonderfully!
    all_line_max= []
    while True:
        try:
            strline= input()
            if len(strline)>0:
                z= (maxspaces(strline))
                all_line_max.append(z)
                y= ' '.join(strline.split())
                print(y)
                print(z)
            if strline =='END':
                break
        except:
            break
        print(all_line_max)

def maxspaces(x):
    y= list(x)
    count = 0
    #this is the number of consecutive spaces we've found so far
    counts=[]
    for character in y:
        count_max= 0
        if character == ' ':
            count= count + 1
            if count > count_max:
                count_max = count
            counts.append(count_max)
        else:
            count = 0
    return(max(counts))


blanks()

我知道这可能是非常低效的,但它似乎几乎可以工作。我的问题是:一旦循环完成附加到 all_lines_max,我想打印该列表的最大值。但是,如果有意义的话,似乎没有办法打印该列表的最大值而不在每一行上都这样做。对我复杂的代码有什么想法吗?

4

1 回答 1

1

只需打印maxof all_line_max,就在您当前打印整个列表的位置:

print(max(all_line_max))

但把它留在顶层(所以有过一次):

def blanks():
    all_line_max = []
    while True:
        try:
            strline = input()
            if strline:
                z = maxspaces(strline)
                all_line_max.append(z)
                y = ' '.join(strline.split())
                print(y)
            if strline == 'END':
                break
        except Exception:
            break
    print(max(all_line_max))

并删除print(z)调用,该调用打印每行的最大空白计数。

每次找到空间时,您的maxspaces()功能都会添加count_max到您的counts列表中;不是最有效的方法。你甚至不需要在那里保留一份清单;需要移出循环,然后将正确反映最大空间计数。你也不必把句子变成一个列表,你可以直接循环一个字符串:count_max

def maxspaces(x):
    max_count = count = 0

    for character in x:
        if character == ' ':
            count += 1
            if count > max_count:
                max_count = count
        else:
            count = 0

    return max_count
于 2013-09-20T06:50:23.603 回答