2012-10-29 5 views
-3

기능은파이썬 루프 문자열 조작

원래이 기능에 대한 입력 변수는 특정 형식의 문자열 (일본어) 데프 expand_fmla라고 : 원래의 첫 번째 두 위치는 심볼을 * 또는 + 따라서 원본의 처음 두 위치에는 ++, **, +**+의 네 가지 가능성이 있습니다. 후속 위치에는 숫자가 3 개 이상 (0 ~ 9) 가능하며 반복이 가능할 수 있습니다.

이 함수는 동일한 수와 원래 수식에서와 같은 순서로 두 개의 연산 기호가 교대로 포함되는 숫자 사이의 수식을 반환해야합니다. 예를 들어

:

expand_fmla('++123') should return '1+2+3' 

expand_fmla('+*1234') should return '1+2*3+4' 

expand_fmla('*+123456') should return '1*2+3*4+5*6' 

어떻게이, 이해가 안 할 수 ???

+4

[whathaveyoutried.com] (http://whathaveyoutried.com) –

+4

무엇을 원하십니까? ... 분명히 저에게 제 숙제를하지 않으시겠습니까? –

+2

진지하게, 당신이 시도한 것은 무엇입니까. 숟가락 먹이를 먹고 싶다면 누군가에게 돈을 지불하는 것이 낫습니다. 당신이 노력했다는 것을 보여 주면 답을 얻을 수 있습니다. "원하지 않기 때문에 인터넷에 문제를 해결하십시오."당신을 멀리 가지 않을 것입니다. – Sheena

답변

2

이 그것을 할 oughtta :

def expand_fmla(original): 
    answer = [] 
    ops = original[:2] 
    nums = original[2:] 
    for i,num in enumerate(nums): 
     answer.extend([num, ops[i%2]]) 
    return ''.join(answer[:-1]) 

In [119]: expand_fmla('+*1234') 
Out[119]: '1+2*3+4' 

In [120]: expand_fmla('*+123456') 
Out[120]: '1*2+3*4+5*6' 

In [121]: expand_fmla('++123') 
Out[121]: '1+2+3' 

희망이 일부 itertools 조리법을 사용하여

0

을하는 데 도움이 특별히 itertools.cycle() 여기에 도움이 될 것입니다 :

from itertools import * 
def func(x): 
    op=x[:2]        # operators 
    opn=x[2:]       # operands 
    cycl=cycle(op)      # create a cycle iterator of operators 

    slice_cycl=islice(cycl,len(opn)-1) # the no. of times operators are needed 
             # is 1 less than no. of operands, so 
             # use islice() to slice the iterator 

    # iterate over the two iterables opn and   
    # slice_cycl simultanesouly using 
    # izip_longest , and as the length of slice_cycl 
    # is 1 less than len(opn), so we need to use a fillvalue="" 
    # for the last pair of items 

    lis=[(x,y) for x,y in izip_longest(opn,slice_cycl,fillvalue="")] 


    return "".join(chain(*lis)) 

print func("++123") 
print func("+*123") 
print func("+*123456") 
print func("*+123456") 

출력 :

01,238,420,157,559,629,
+0

항상 itertools 예제를 보는 것을 좋아합니다. 그러나 나는 발전기를 줄로 나누는 것이 훨씬 낫다는 것을 느낄 정도로 읽기가 어렵지 않습니다. 단지 의견. – jdi

+0

당신이 옳아 요,이 한 줄자를 읽는 것은 어렵습니다. 그래서, 여러 줄로 나누어 조금 더 명확하게 만들려고했습니다. –

+0

그 점은 확실히 개선되었습니다. 비록 내가 발전기를 변수들로 나누는 것을 언급하고 있었지만. 긴 라이너를 보는 것보다 쉬울 것이라고 생각합니까? 변수 이름은 의도 설명에 도움이되는 경향이 있습니다. – jdi