1

問題:

私は数字の文字列を持っています、それをstrNumbersと呼びましょう。この文字列を文字ごとに調べて、特定の時点まで各数値を計算する必要があります。その時点で、一度に2つの数値を取得し、それらの2つの数値の計算を開始する必要があります。これが私がこれまでに思いついたものです。ご覧のとおり、ループを反復処理して単一の文字を問題なくプルする方法を理解しました。また、一度に2つの文字を引き出し始める必要がある時期を正確に判断するためのカウンターが必要であることも理解していますが、今はどうでしょうか。どんな助けでもありがたいです、ありがとう。

for i in strNumbers:    
    intNumber = int (i)
    **do math on intNumber*
    **print result**
    count = count +1
    if count == 5:
        ??

編集:このタスクを実行するために2つの別々のループを使用することにしましたが、別の問題が発生しました。次のコードは、TypeErrorをスローします。'int'オブジェクトを行で暗黙的にstrに変換できません。number=int(strTail [i:i + 2])

for i in strTail:
    number = int(strTail[i:i+2])
    intRooted = int( math.sqrt(number))
    strDecoded += str(intRooted)

論理的には、これはまさに私がやりたいことのように思えます。私は、位置'i'の数字とiの前の数字を引くように配置しました。ここで何が欠けていますか?

4

4 に答える 4

5

文字列は、各文字に個別に (または一度に 2 つ) アクセスする配列として扱うことができます。したがって、指定した量に達したら、ループに一度に 2 文字の取得を開始するように指示するフラグを設定できます。

i=0
offset = 1
while i <len(str_numbers):
    if offset>1:
        int_number = int(str_numbers[i:i+offset])
    else:
        int_number = int(str_numbers[i])
    if i==5:
        offset=2
    i+=offset

編集:これを行うための混乱の少ない方法を考えました:

offset=1
i=0
while i<len(str_numbers):
    if i==5:
        offset=2
    int_number = int(str_numbers[i:i+offset])
    i+=offset
于 2012-10-01T16:30:04.290 に答える
0

関連する質問「Python でリストを均等なサイズのチャンクに分割するにはどうすればよいですか?」で使用できるコードがいくつかあります。最初に文字列を 1 桁のセクションと 2 桁のセクションに分割し、必要に応じてチャンクします。

def chunks(l, n):
    return [l[i:i+n] for i in range(0, len(l), n)]

strNumbers = "123456789012345"
single_part = chunks(strNumbers[:5], 1)
double_part = chunks(strNumbers[5:], 2)
string_numbers = single_part + double_part
numbers = [int(x) for x in string_numbers]
print numbers
#result: [1, 2, 3, 4, 5, 67, 89, 1, 23, 45]
于 2012-10-01T16:53:27.800 に答える
0

必要な単一文字の数が既にわかっている場合は、2 つのループを作成できます。

for s in strNumbers[:count]:
    do_something

indices = range(len(strNumbers))
for i in indices[count::2]:
    s = strNumbers[i:i+2]
    do_something_else

また

for (s1, s2) in zip(strNumbers[count::2], srtNumbers[count+1::2]):
    s = s1+s2
    do_something_else
于 2012-10-01T16:34:55.563 に答える
0
>>> my_nums = [1,2,3,4,5,6,7,8,9]
>>> dbl_nums = [[my_nums[i],my_nums[i+1]] for i in range(5,len(my_nums),2)] #double up numbers with index >= 5
>>> sngl_nums = map(lambda x:x*2,my_nums[:5]) #perform some math on single numbers for index < 5
>>> dbl_nums = map(lambda x:x[0]+x[1],dbl_nums) # do some math on 2 nums
>>> print dbl_nums # (6+7 , 8+9 )
[13, 17]
>>> print sngl_nums #(2*1,2*2,2*3,2*4,2*5)
[2, 4, 6, 8, 10]
>>> print sngl_nums+dbl_nums  #combined back into one list
[2, 4, 6, 8, 10, 13, 17]

数値の文字列をリストに変換するには

my_nums = map(int,num_str)
>>> map(int,"123")
[1, 2, 3]
于 2012-10-01T16:29:23.427 に答える