Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1.1K
Vistas
¿Cómo sumar valores pares e impares con un bucle for y sin condición if?

Estoy tomando una clase de programación en la universidad y uno de los ejercicios en la hoja de problemas era escribir este código:

 number = int(input()) x = 0 y = 0 for n in range(number): if n % 2 == 0: x += n else: y += n print(x) print(y)

usando solo un ciclo "for" y ningún "while" o "if".

El propósito del código es encontrar la suma de los números pares y la suma de los números impares desde cero hasta el número ingresado e imprimirlo en la pantalla.

Recuerde que en este momento no se supone que sepamos sobre funciones.

Lo he estado intentando durante mucho tiempo y parece que no puedo encontrar una manera de hacerlo sin usar declaraciones "si" para saber si la variable de bucle es par o impar.

over 4 years ago · Hanz Gallego
12 Respuestas
Responde la pregunta

0

for n in range(number): x += (1 - n % 2) * n y += (n % 2) * n
over 4 years ago · Hanz Gallego Denunciar

0

Puramente con fines educativos (y un poco de diversión), aquí hay una solución que no usa ningún bucle for 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?

  • La función input() devuelve un objeto str , que se convierte en un número entero mediante la función int() .
  • El entero está envuelto en las funciones range() y list() 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.
  • Simplemente use la función sum() para obtener las sumas.
over 4 years ago · Hanz Gallego Denunciar

0

for n in range(1,number,2): x += n y += n-1 print(y) print(x)

Este código tiene el mismo resultado que el ejemplo.

over 4 years ago · Hanz Gallego Denunciar

0

Operador ternario:

 for n in range(number): x += (n,0)[n%2] y += (0,n)[n%2]
over 4 years ago · Hanz Gallego Denunciar

0

Usted pidió una solución con un ciclo, pero ¿qué tal una solución sin ciclo?

Es bien sabido que la suma de los números del 1 al n es (n+1)*n/2 . Por lo tanto, la suma de los números pares 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 n inclusive .

over 4 years ago · Hanz Gallego Denunciar

0

La suma de los primeros n números es n (n+1)/2 (Matemáticamente derivado). Entonces, si conocemos el valor de n , podemos encontrar la suma de todos los números del 1 al n.

Si encontramos la suma de todos los números impares antes de n y la restamos de la suma de los primeros n , obtenemos la suma de todos los números pares antes de n .

Aquí está el código:

 n = int(input("Enter a number: ")) odd = 0 for i in range(1,n+1,2): odd += i even = int(n*(n+1)/2) - odd print("even:",even,"odd:",odd)
over 4 years ago · Hanz Gallego Denunciar

0

Creo que eres un principiante. No me gustaría confundirlo con la implementación compleja de los operadores de corte.

Como lo mencionaste

El propósito del código es encontrar la suma de los números pares y la suma de los números impares desde cero hasta el número ingresado e imprimirlo en la pantalla.

No hay necesidad de encontrar que el número inicial es par/impar. Y su programa está equivocado si desea incluir el número de entrada en el cálculo de la suma par/impar.

Ejemplo

Aporte

5

Rendimiento esperado

6 9

Explicación

Suma par: 2+4 = 6

Suma impar: 1+3+5 = 9

su salida

6 4 (salida incorrecta)

La función range() excluirá el número. Solo iterará de 0 a 4 mientras la entrada sea 5. Por lo tanto, si desea incluir 5, debe agregar 1 al número mientras lo pasa en la función range() .

 number = int(input()) x = 0 y = 0 for n in range(number+1): x += (1 - n % 2) * n #this will add 0 if not even y += (n % 2) * n #this will add 0 if not odd print(x) print(y)
over 4 years ago · Hanz Gallego Denunciar

0

Aquí están mis 2 centavos si se nos permite usar numpy.

 import numpy as np number = int(input()) l = np.array(range(number)) print('odd:',sum(l % 2 * l)) print('even:', sum((1- l % 2) * l))
over 4 years ago · Hanz Gallego Denunciar

0

También hay forma matemática:

 num = int(input("Enter number:")) odd = ((num+1)/2)**2 even = num*(num+1)/2 - odd

La suma de los primeros n números impares es n^2. Para contar los números impares usamos (num+1)/2 . Para obtener la suma de los números pares, podríamos usar un enfoque similar, pero preferí restar odd de la suma de los primeros n números, que es n*(n+1)/2.

over 4 years ago · Hanz Gallego Denunciar

0

Si tienes permiso para usar una lista

 number = int( input() ) counts = [ 0, 0 ] for n in range( number ): counts[ n % 2 ] += n print( counts[ 0 ] ) print( counts[ 1 ] )
over 4 years ago · Hanz Gallego Denunciar

0

Hay otra forma de sumar los índices pares e impares en el bucle for en función del resto del módulo 2:

 number = int(input()) odd = 0 even = 0 for i in range(len(number)): odd += i * (i % 2) even += i * ((i + 1) % 2) print (odd, even)
over 4 years ago · Hanz Gallego Denunciar

0

number = 1000000 x = 0 y = 0 [(x:=x+n, y:=y+(n+1)) for n in range(0,number,2)] print(f'{x}, {y}')

Esto utiliza una lista de comprensión y el nuevo operador de asignación de Python.

over 4 years ago · Hanz Gallego Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda