He intentado este problema así:

a = input("Enter number : ") 
s = 3
w = 1 
while a>0: 
 digit=a%10
 if n%2 == 0:
     p = p*digit 
 else: 
     s = s+digit 
     a=a/10
 n=n+1 

print "The sum is",s 

Funciona perfectamente para números pares, pero para números impares como 234 muestra la suma como 6 y el producto 3

-5
Jai Mahajan 31 ago. 2014 a las 00:27

5 respuestas

La mejor respuesta

No explícita bucle:

import operator
from functools import reduce # in Python 3 reduce is part of functools

a = input("Enter number : ") 
lst = [int(digit) for digit in a]

add = sum(lst[1::2])
mul = reduce(operator.mul, lst[::2],1)

print("add =",add,"mul =",mul,"result =",add+mul)

Productora:

Enter number : 234
add = 3 mul = 8 result = 11
3
Sylvain Leroux 30 ago. 2014 a las 21:29

Error fácil de cometer sobre la numeración. El primer elemento de cualquier cadena, lista o matriz siempre es el índice 0. Por ejemplo, tenga cuidado en el futuro para quitar 1 del valor devuelto por len (list) si está iterando a través de los elementos de una lista con un bucle for, p.

for x in range(len(list)-1):
   #your code using list[x]
0
Robin Hartland 30 ago. 2014 a las 21:36

Tienes que comenzar con n = 0 para que esto funcione

a = int(input("Enter number"))
s = 0 
p = 1
n = 0
while a>0: 
    digit=a%10
    if n%2 == 0:
        p *= digit
    else: 
        s += digit
    a /= 10
    n += 1 

print "The sum is",s 
print "Product is",p 
0
chucksys 30 ago. 2014 a las 20:42

Aquí está la versión matemática:

n = input('Enter a number: ')
digits = []

while n > 0:
    digits.append(n%10)
    n //= 10

s = 0
p = 1
i = 0
for digit in reversed(digits):
    if i%2 == 0:
        s += digit
    else:
        p *= digit
    i += 1

print 'Sum of even digits:', s
print 'Product of odd digits:', p
print 'Answer:', s+p

He tratado de hacer esto lo más simple posible para ti.


Aquí hay una función que hace lo mismo:

def foo(n):
    s = 0
    p = 1
    for i, digit in enumerate(str(n)):
        if i%2 == 0:
            s += digit
        else:
            p *= digit
    return s+p
0
Scorpion_God 31 ago. 2014 a las 08:07
def foo(num):
    lst = [int(digit) for digit in str(num)]
    mul, add = 1, 0
    for idx, val in enumerate(lst):
        if not idx % 2:
            mul *= val
        else:
            add += val
    return add, mul

Y usándolo:

>>> foo(1234)
(6, 3)
>>> foo(234)
(3, 8)

Esta función tomará un entero o una representación de cadena de un entero y lo dividirá en una lista de int s. Luego usará enumerate para iterar sobre la lista y realizar las operaciones requeridas. Devuelve una tupla de 2 elementos.

0
kylie.a 31 ago. 2014 a las 16:27