偶数位置数字的乘积之和
我尝试过这样解决这个问题:
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
你需要从 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
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
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)
这个函数可以接收一个整数或者一个表示整数的字符串,然后把它分割成一个整数的列表。接着,它会用 enumerate
来遍历这个列表,并执行需要的操作。最后,它会返回一个包含两个元素的元组。
0
关于编号,很多人容易犯错。任何字符串、列表或数组的第一个元素的索引总是从0开始。例如,如果你用for循环遍历一个列表的元素,记得在使用len(list)返回的值时要减去1。
for x in range(len(list)-1):
#your code using list[x]
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