Добавление через итерацию - PullRequest
0 голосов
/ 02 ноября 2018

Я хочу взять пользовательский ввод и добавить каждое число до 0. Например, user inputs 9 Я хочу добавить 9 + 8 + 7 + 6 .... +1 и вывести сумму. Мой код

def main(*args):
    sum = 0
    for i in args:
        sum = i + (i - 1)
    return sum

result = main(9)
print(result)

подходит близко, но я не могу заставить его повторяться до 0. Я попытался добавить диапазоны несколькими способами, но безуспешно. Я застрял.

Ответы [ 3 ]

0 голосов
/ 02 ноября 2018

N-й номер треугольника. Итерация не требуется.

def calculate_nth_triangle_number(value):
    return value * (value + 1) / 2
0 голосов
/ 02 ноября 2018

В вашем коде неправильно используется относительно продвинутая функция Python, то есть упаковка аргументов, где все аргументы, предоставленные функции, упакованы в кортеж.

Что происходит, когда вы звоните main(9)? цикл вводится один раз (поскольку вызов функции с одним аргументом эквивалентен args = (9, ) в теле функции) i принимает только одно значение, i = 9, и у вас есть sum = 9+8 = 17.

В вашем случае мне не нравится цикл for, можете ли вы использовать цикл while? с while ваша функция точно соответствует определению вашей задачи!

def my_sum(n):
    result = 0
    while n>0:
        result = result + n
        n = n - 1
    return result

Обратите внимание, что порядок суммирования и уменьшения имеет первостепенное значение для правильного результата ... обратите внимание также, что sum является именем встроенной функции, и считается неправильным перегрузить встроенное имя с помощью выражение твоего.

0 голосов
/ 02 ноября 2018

Допустим, пользовательский ввод назначен на x, тогда самый простой ответ:

sum(range(int(x)+1))

Обратите внимание, что range() сгенерирует список (фактически, тип неизменяемой последовательности в Python 3) чисел вплоть до x, следовательно, +1.

С точки зрения вашего исходного кода, есть несколько проблем. Во-первых, вы должны избегать именования переменных так же, как встроенные модули Python, такие как sum. Во-вторых, вы пытаетесь перебрать набор входных аргументов (например, args = (9,) в вашем случае), который будет выполнять 9 + (9-1) или иначе 17 и затем возвращать эту сумму в качестве вывода.

Вместо этого вы можете сделать что-то вроде:

def main(*args):
    mysum = 0
    for i in range(args[0]+1):
        mysum = mysum + i
    return mysum

result = main(9)

print(result)

Оба решения вернутся сюда 45.

...