0

Python (3.x) を使用して、課題用の簡単なプログラムを作成しています。複数行の入力を受け取り、複数の連続する空白がある場合、それらを取り除き、1 つの空白に置き換えます。[これは簡単な部分です。] 入力全体で最も連続した空白の値も出力する必要があります。

例:

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されます。最も効率的な方法ではありません。そこにリストを保持する必要さえありません。ループの外に移動する必要があり、最大スペース数が正しく反映されます。また、文をリストに変換する必要はありません。文字列を直接ループできます。countscount_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 に答える