4

1行のテキストファイルがあります。テキストの行は、一連の乱数です。5が繰り返される回数を最も多く決定し、繰り返される回数を印刷する必要があります。例:numList:1234555325146555。5が連続して繰り返される最大回数は3回で、これは2回発生します。これが私がこれまでに持っているコードです、それはどの位置5が発生するかを私に示します。これが最初のステップだと思いますが、先に進む方法がわかりません。

numbers = open("numbers.txt",'rU')
count = -1
numString = numbers.readline()
for num in numString:
    count += 1
    if num == '5':
        print count
        counter += 1
4

6 に答える 6

4

5がどの位置にあるかを見つけるための正しいアイデアが得られました。

では、5の列の長さをどのようにして知るのでしょうか。について考える:

  1. シリーズの一部である場合は、5を見つけたかどうかを知る必要があります。前の番号を追跡します。それも5の場合は、シリーズを続けています。
  2. シリーズを継続している場合は、その長さを追跡するために別のカウンターを用意してください。
  3. 5以外の数値に達した場合は、カウンターをリセットする必要があります。ただし、リセットする前に、その値を保存する必要があります。
  4. 問題の次の部分(5のシリーズがいくつあるかを調べる)では、これまでに持っている最長のシリーズとそれを何回見たかを追跡する追加の「メタ」変数を使用してみてください。

幸運を!質問を続けます

于 2012-07-11T17:55:05.610 に答える
3

私はよくこのようなタスクで自分自身に問いかけます。問題が十分に大きく、すべてを思い出せない場合、コンピューターなしでこれを行うにはどうすればよいでしょうか。それで、ここでは、5が見つかるまで進みます。次に、次の番号を見て、5の場合は、5が連続しなくなるまで続けます。したがって、あなたの例では、3つの5が連続して見つかりました。私が見つけた最長のものは35でした。次に、次の5に進みます。

次に、5が連続していくつあったかをもう一度数えます。この場合、1つしかないことがわかります。したがって、3未満であることがわかるので、何もしません。次に、次の5に進みます。

3列に並んでいることがわかります。自分の論文に戻って、見つけた最長の長さを確認し、3であることがわかります。次に、見たことをメモします。 3列2セット。

4つ以上を見つけた場合は、3つのセットについて持っていた情報をすべて忘れて、4つのセットなどからやり直します。

したがって、この種のアイデアをループに実装してみてください。

于 2012-07-11T17:55:01.700 に答える
2

これを理解するためのかなり簡単な方法は次のとおりです。

>>> import re
>>> numString = '1234555325146555'
>>> fives = re.findall(r'5+', numString)
>>> len(max(fives))          # most repetitions
3
>>> fives.count(max(fives))  # number of times most repetitions occurs
2
于 2012-07-11T17:49:56.810 に答える
1

与えられた文字列に5の特定の文字列が含まれていないかどうかを、それがなくなるまで継続的にチェックします(毎回「5」を追加します)。次に、1をバックアップしcount、文字列のメソッドを使用します-このようなもの(擬似コードが続きます-これは構文的に有効なPythonではないことに注意してください。これは宿題なのであなた次第です)。

str5='5'
while str5 in your_string
    concatenate '5' with str5

#your string is too long by 1 element
max_string=str5 minus the last '5'
yourstring.count(max_string)
于 2012-07-11T17:49:00.950 に答える
0
from collections import defaultdict, Counter
from itertools import groupby

num_str = '112233445556784756222346587'

res = defaultdict(Counter)
for dig,seq in groupby(num_str):
    res[dig][len(list(seq))] += 1

print res['5'].most_common()

戻り値

[(1, 2), (3, 1)]

(「5」が2回表示され、「555」が1回表示されたことを意味します)

于 2012-07-11T17:53:27.877 に答える
0
#  First step: Find at most how many times 5 comes in a row.
# For this I have a counter which increases by 1 as long 
# as I am dealing with '5'. Once I find a character other 
# than '5' I stop counting, see if my counter value is greater
# than what I have found so far and start counting from zero again.

numbers = open("numbers.txt",'rU')
count = -1
numString = numbers.readline()
maximum = -1;

for num in numString:
    count +=1
    if num== '5':
        counter += 1
    else:
        maximum=max(maximum, counter)
        counter = 0;

#  Second step: Find how many times this repeats.
# Once I know how much times it comes in a row, I find consequent fives
# with the same method and see if the length of them is equal to my maximum

count=-1
amount = 0
for num in numString:
    count +=1
    if num== '5':
        counter += 1
    else:
        if maximum == counter:
            amount += 1
        counter = 0;

それが役に立てば幸い :)

于 2012-07-11T18:01:29.707 に答える