Basta ya de indagar por todo internet ya que estás al sitio adecuado, tenemos la solución que quieres y sin complicaciones.
Solución:
Puramente con fines educativos (y un poco de diversión), aquí hay una solución que no usa ningún for
bucles en absoluto. (Por supuesto, en la lógica subyacente de las funciones, hay al menos cinco bucles).
num = list(range(int(input('Enter number: '))))
even = num[::2]
odd = num[1::2]
print('Even list:', even)
print('Odd list:', odd)
print('Even:', sum(even))
print('Odd:', sum(odd))
Producción:
Enter number: 10
Even list: [0, 2, 4, 6, 8]
Odd list: [1, 3, 5, 7, 9]
Even: 20
Odd: 25
¿Como funciona?
- los
input()
función devuelve unstr
objeto, que se convierte en un número entero usando elint()
función. - El entero está envuelto en el
range()
ylist()
funciones para convertir el número dado en una lista de valores dentro de ese rango.- Esta es una convención que usará/verá mucho a lo largo de su carrera en Python.
- El corte de lista se utiliza para obtener cada segundo elemento de la lista. Dado que la lista se basa en cero, estos serán números pares.
- Vuelva a dividir la misma lista, comenzando con el segundo elemento, y obtenga cada segundo elemento… números impares.
- Enlace a una buena respuesta SO sobre el corte en Python.
- El simplemente usa el
sum()
función para obtener las sumas.
for n in range(number):
x += (1 - n % 2) * n
y += (n % 2) * n
Usted pidió una solución con una bucle, pero ¿qué tal una solución con no ¿círculo?
Es bien sabido que la suma de los números de 1
a n
es (n+1)*n/2
. Así, la suma de incluso numeros es 2 * (m+1)*m/2
con m = n//2
(es decir floor(n/2)
). Entonces, la suma de los impares se puede calcular mediante la suma de todos los números menos la suma de los números pares.
n = 12345
m = n // 2
e = (m+1)*m
o = (n+1)*n//2 - e
Verificación:
>>> e, e==sum(i for i in range(n+1) if i % 2 == 0)
38112102 True
>>> o, o==sum(i for i in range(n+1) if i % 2 == 1)
38105929 True
Nota: Esto calcula las sumas de números hasta y incluidon
.
Si entiendes que te ha sido útil nuestro post, te agradeceríamos que lo compartas con más juniors de esta forma contrubuyes a dar difusión a nuestra información.