Как написать программу для l oop, которая находит сумму всех нечетных чисел в диапазоне, но не использует функцию if - PullRequest
0 голосов
/ 19 июня 2020

Мне нужно написать код, который запрашивает у пользователя ввод «num» любого числа и вычисляет сумму всех нечетных чисел в диапазоне от 1 до num. Кажется, я не могу понять, как написать этот код, потому что у нас был аналогичный вопрос о добавлении четных чисел в диапазон, который я смог выяснить.

Я также добавил строки кода, которые я уже написал для любой критики того, что я сделал правильно / неправильно. Был бы очень признателен за любую помощь с этим :)

total = 0

for i in range(0, num + 1, 1):
    total = total + i
return total

Ответы [ 6 ]

5 голосов
/ 19 июня 2020
total = sum(range(1, num + 1, 2))

, если вам действительно нужен l oop:

total = 0
for i in range(1, num+1, 2):
    total += i

и чтобы сделать его более exoti c, вы можете учитывать свойство i%2==1 только для нечетных чисел и i%2==0 для четных чисел (осторожно: вы делаете свой код нечитаемым)

total = 0
for i in range(1, num+1):
    total += i * (i % 2)

Вы можете изобрести гораздо больше способов решить эту проблему, используя свойства четно-нечетные, например:

  • (-1)^i равно 1 или -1
  • i & 0x1 равно 0 или 1
  • abs(((1j)**i).real) равно 0 или 1

и так на

3 голосов
/ 19 июня 2020

Функция диапазона имеет три параметра: начало, останов и шаг.

Например: for i in range(1, 100, 2) будет l oop от 1 до 99 для нечетных чисел.

1 голос
/ 19 июня 2020

Самое простое решение

Вы можете использовать математическую формулу

#sum of odd numbers till n
def n_odd_sum(n):
    return ((n+1)//2)**2
print(n_odd_sum(1))
print(n_odd_sum(2))
print(n_odd_sum(3))
print(n_odd_sum(4))
print(n_odd_sum(5))
1
1
4
4
9
0 голосов
/ 19 июня 2020

Вы можете использовать математическую формулу (работает каждый раз) :

num = int(input("Input an odd number: "))
total = (1+num)**2//4
print(total)

Вывод:

Input an odd number: 19
100
0 голосов
/ 19 июня 2020

Использование фильтра:

start_num = 42
end_num = 500
step = 7
sum([*filter(lambda x: x % 2 == 1, [*range(start_num, end_num+1, step)])])
0 голосов
/ 19 июня 2020
total = 0

num = int(input())
for i in range(num+1):
    if i%2 == 1:
        total += i

print (total)

Оператор % возвращает остаток, в данном случае остаток при делении n / 2. Если это 1, это означает, что ваше число нечетное, вы можете добавить его к своей общей сумме.

Конечно, вы можете сделать это в одной строке с python, но это может быть проще для понимания.

...