2013-10-04 2 views
-2

Я пытаюсь запустить это, используя stat, if, цикл и список. Список является частью параметров. Я не уверен, как написать оператор if, и запрограммировать цикл всех слов и установить все, как это должно быть.Как это сделать с помощью оператора 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 loop' и '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

Я думаю, что вы хотите 'newSndIdx + = 500', а не' = 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, например:

Смежные вопросы