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.
for n in range(number): x += (1 - n % 2) * n y += (n % 2) * nPuramente 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?
input() devuelve un objeto str , que se convierte en un número entero mediante la función int() .range() y list() para convertir el número dado en una lista de valores dentro de ese rango.sum() para obtener las sumas.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.
Operador ternario:
for n in range(number): x += (n,0)[n%2] y += (0,n)[n%2]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 - eVerificació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 .
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)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)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))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.
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 ] )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)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.