2016-03-21 1 views
-4
d = int(input("Please Enter any Number: ")) 
a = 0 

def product_of_digits(Number): 
     d= str(Number) 
     for integer in d: 
      s = 0 
      k = [] 
      while s < (len(d)): 
      print (int(d[s])*int(d[s+1])*int(d[s+2])*int(d[s+3])*int(d[s+4])) 
      s += 1 

print (product_of_digits(a)) 
+0

Вы должны смотреть на [itertools.reduce()] (https://docs.python.org/3/library/functools .html # functools.reduce). – zondo

ответ

7

У вас есть несколько проблем в вашем коде. Начнем в порядке исполнения:

  • print(product_of_digits(a)) - Если предположить, что product_of_digits должна возвращать произведение цифр числа вы передаете, то это будет всегда возвращать 0, так как вы пройти a (которая равна нулю) вместо введенного пользователем номера (d).
  • for integer in d - for Петли повторяют элементы чего-то, а не индексы. В этом случае он будет перебирать символы в строке d. Это означает, что на каждой итерации integer будет представлять собой одну цифру.
  • s = 0 - В каждой итерации цикла вы устанавливаете его на ноль.
  • Аналогично s += 1 в конце цикла for не вызовет никакого эффекта, так как в начале следующей итерации s снова будет равен нулю. Вероятно, вы указали, что эта строка находится внутри цикла while (для этого он имеет неправильный уровень отступов).
  • while s < (len(d)) - Итак, внутри цикла, где вы повторяете цифры числа, вы хотите снова перебрать цифры? Почему
  • int(d[s]) * int(d[s+1]) … - Статическое умножение пяти цифр здесь приводит к поражению цели обработки каждого числа - вместо тех чисел, которые имеют 5 цифр.
  • d[s+4] - Для этого необходимо, чтобы s был ниже len(d)-5, но вы делаете итерацию, пока s не будет len(d) - 1.
  • print() - Вы должны вернуть свою функцию, а не печатать ее.

Возможное решение может выглядеть следующим образом:

def product_of_digits (number): 
    product = 1 
    for digit in str(number): 
     product = product * int(digit) 
    return product 

print(product_of_digits(d)) 
+1

Другое хорошее решение: 'return itertools.reduce (lambda x, y: int (x) * int (y), str (число), 1)' – zondo

+0

@zondo на основе того, как выглядит вопрос, я сомневаюсь, что парень ожидается использовать лямбда в своей домашней работе. –

+2

@AmitGold: Вот почему я сказал * другое * хорошее решение. Я не предлагаю заменить это. – zondo

Смежные вопросы