2013-10-06 2 views
0

Я должен написать функцию для одного из моих классов компьютерных наук в python. Предполагается, что функция принимает значение startValue, а затем увеличивает его до достижения значений numberOfValues. Это моя функция до сих пор:Python For loop multiple returns

def nextNValues(startValue, increment, numberOfValues): 
    result = int(0) 
    for i in range(0, numberOfValues): 
     increase = i * increment 
     result = startValue + increase 
    return result 

Я называю это, выполнив:

print(nextNValues(5,4,3)) 

Проблема заключается в том, что выход только 13. Как сделать так, возвращает число каждый раз, когда он приращения. Например, 5, 9, 13? У меня была эта проблема с моими предыдущими функциями, но я только что добавлял и удалял вещи без большой логики, чтобы заставить ее работать. Что я делаю не так?

+0

Пожалуйста исправить отступы. – tacaswell

+1

Как ваш класс не работал ни с списками, ни с генераторами, вы уверены, что вам нужно _return_ значения? Возможно, ваша задача - просто «распечатать» значения внутри функции? –

ответ

1

Вы должны создать список. Каждый раз через итерацию добавьте номер в список. Затем, в конце, просто верните список.

+0

Мы пока еще не работали со списками. Задача состоит в том, чтобы сделать это только для циклов. – user1881401

+0

Существует * не так *, чтобы сделать это «просто для циклов». Для хранения нескольких значений, например списка, нужен контейнер. Альтернативой является использование генератора, как предлагает Денис, но это * значительно * более продвинутый - если вы еще не сделали списки, генераторы определенно не являются ожидаемым ответом. –

2

Это идеальный вариант использования для generators.

Короче говоря, просто использовать yield вместо return:

def nextNValues(startValue, increment, numberOfValues): 
    result = int(0) 
    for i in range(0, numberOfValues): 
    increase = i * increment 
    result = startValue + increase 
    yield result 

клиенты вашего кода могут затем использовать его либо в простом цикле:

for value in nextNValues(...): 
    print(value) 

Или они могут получить список если необходимо, путем преобразования его с list. Например, если один нужно напечатать результат:

print(list(nextNValues(...))) 
+0

Это не сработало. Это закончило тем, что это <объект-генератор nextNValues ​​на 0x1027ebd20> – user1881401

+1

Это потому, что вы попробовали распечатать его напрямую. Я показал, как его использовать. Если вы хотите распечатать его, используйте преобразование в 'list'. – Denis

0
def nextNValues(startValue, increment, numberOfValues): 
    result = [] 
    for i in range(0, numberOfValues): 
     increase = i * increment 
     #result = startValue + increase 
     result.append(startValue + increase) 
    return result