偶数位数的乘积之和

时间:2014-08-30 20:27:21

标签: python algorithm

我尝试过这样的问题:

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 

即使没有数字也能正常工作,但对于像234这样的奇数没有数字,它显示总和为6和产品3

5 个答案:

答案 0 :(得分:3)

没有显式循环:

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)

产:

Enter number : 234
add = 3 mul = 8 result = 11

答案 1 :(得分:0)

你必须从n = 0开始才能使其工作

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 

答案 2 :(得分:0)

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

使用它:

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

此函数将采用整数或整数的字符串表示形式,并将其拆分为int的列表。然后,它将使用enumerate迭代列表并执行所需的操作。它返回一个2元素元组。

答案 3 :(得分:0)

很容易弄错编号。任何字符串,列表或数组的第一项始终是索引0.例如,如果要使用for迭代列表的项目,请注意以后从len(list)返回的值中取走1循环例如

for x in range(len(list)-1):
   #your code using list[x]

答案 4 :(得分:0)

这是数学版本:

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

我试图让你尽可能简单。


这是一个做同样事情的函数:

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