2013-10-04 6 views
-2

if statment, for 루프 및 목록을 사용하여이 작업을 실행하려고합니다. 목록은 매개 변수의 일부입니다. 나는 if 문을 쓰는 방법을 모르며 프로그램이 다른 단어들 모두를 통해 루프되도록하고 그것이 어떻게 되야하는지 모든 것을 설정한다. 에 대해 (NO 필요한 경우) 어떤if 문을 사용하여 루프를 실행하려면 어떻게해야합니까?

newSndIdx=0; 
    for i in range (8700, 12600+1): 
    sampleValue=getSampleValueAt(sound, i) 
    setSampleValueAt(newSnd, newSndIdx, sampleValue) 
    newSndIdx +=1 

    newSndIdx=newSndIdx+500 
    for i in range (15700, 17600+1): 
    sampleValue=getSampleValueAt(sound, i) 
    setSampleValueAt(newSnd, newSndIdx, sampleValue) 
    newSndIdx +=1 

    newSndIdx=newSndIdx+500  
    for i in range (18750, 22350+1): 
    sampleValue=getSampleValueAt(sound, i) 
    setSampleValueAt(newSnd, newSndIdx, sampleValue) 
    newSndIdx +=1 

    newSndIdx=newSndIdx+500  
    for i in range (23700, 27250+1): 
    sampleValue=getSampleValueAt(sound, i) 
    setSampleValueAt(newSnd, newSndIdx, sampleValue) 
    newSndIdx +=1 

    newSndIdx=newSndIdx+500  
    for i in range (106950, 115300+1): 
    sampleValue=getSampleValueAt(sound, i) 
    setSampleValueAt(newSnd, newSndIdx, sampleValue) 
    newSndIdx+=1 
+1

좀 더 구체적으로 알려주세요. 당신의 문제는 무엇이고, 프로그램에서 무엇을 기대합니까? – aIKid

+1

이것은 너무 모호합니다. 이미 실행되지 않습니까? 왜'if','for 루프','list'를 사용해야합니까? 그들을 위해 무엇입니까? 이 '다른 단어들'은 무엇이고 당신은 무엇을 세워야합니까? –

+0

이것은 이미 작동하지만 if 문과 루프 중 하나에이를 압축하려고합니다. for 루프는 모든 다른 범위를 통해 실행되며이 프로그램이 이미 수행 한 작업을 정확하게 수행합니다. –

답변

2

는 :

ranges = (
    (8700, 12600), 
    (15700, 17600), 
    (18750, 22350), 
    (23700, 27250), 
    (106950, 115300), 
) 

newSndIdx = 0 

for start, end in ranges: 
    for i in range(start, end + 1): 
     sampleValue = getSampleValueAt(sound, i) 
     setSampleValueAt(newSnd, newSndIdx, sampleValue) 
     newSndIdx += 1 
    newSndIdx += 500 
+0

고맙습니다 만이 단어는 한 단어 만 들려줍니다. (내가들을 수 있습니다) –

+0

'= 500'이 아니라'newSndIdx + = 500'을 원합니다. 이렇게하면 세그먼트 사이에 간격을 두지 않고 트랙의 동일한 부분을 각 새 세그먼트로 덮어 쓰게됩니다. – abarnert

+0

"+"가 제대로 작동했습니다. –

0

난 당신이 여기에 무엇을 찾고 있는지 알 것 같아요. 그렇다면 꽤 서투르다. GaretJax가 재 설계 한 방식은 훨씬 더 간단하고 명확합니다 (부팅하는 데 좀 더 효율적입니다). 그러나 그것은 가능합니다 :

# Put the ranges in a list: 
ranges = [ 
    (8700, 12600), 
    (15700, 17600), 
    (18750, 22350), 
    (23700, 27250), 
    (106950, 115300), 
] 

newSndIdx = 0 

# Write a single for loop over the whole range: 
for i in range(number_of_samples): 
    # If the song is in any of the ranges: 
    if any(r[0] <= i <= r[1] for r in ranges): 
     # Do the work that's the same for each range: 
     sampleValue=getSampleValueAt(sound, i) 
     setSampleValueAt(newSnd, newSndIdx, sampleValue) 
     newSndIdx +=1 

그러나 이것은 여전히 ​​각 범위에 500을 더하는 비트가 누락되어 있습니다. 그렇게하려면 다음과 같이 다른 if이 필요합니다.

if any(r[0] <= i <= r[1] for r in ranges): 
     if any(r[0] == i for r in ranges[1:]): 
      newSndIdx += 500 
     # The other stuff above 
관련 문제