type comment multiplier tous les nombres dans une séquence(python)



produit des éléments d'une liste python (7)

Comme si je disais le programme n=10 , comment pourrais-je le faire revenir 10*9*8*7*6*5....1 ?

J'ai pensé à une boucle de temps mais j'ai l'impression d'avoir foiré quelque part parce qu'elle ne résume pas tous les nombres de la séquence.

Mon code actuel ressemble à ceci

def product(n):
  i=n
  a=n-1
  while a>0:
    return i * a
    b=i * a
    a=a-1
    i=i-1

Existe-t-il de meilleurs moyens de le faire sans utiliser la récursivité? Désolé pour la question incroyablement débutant, mais j'essaie de m'apprendre à coder. Tu dois commencer quelque part!

Merci!


Answer #1

Eh bien, voici une autre approche Pythonic.

>>> import operator
>>> numbers = range(1, 11)
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> reduce(operator.mul, numbers)
3628800

Answer #2

Puisque vous essayez d'apprendre à coder, je ne vous donnerai pas une solution complète, mais je vais vous donner quelques conseils à la place:

  • Avoir une boucle for qui va de 1 à n (en utilisant range(1, n+1) ) au lieu de while -loop. Cela générera les valeurs que vous voulez multiplier et répéter le bon nombre de fois (ce qui peut être un peu difficile avec des boucles while parfois).

  • Avoir une variable nommée product pour stocker le résultat des multiplications à chaque fois dans la boucle.

  • Initialisez le product avant d'entrer le for -loop. Une fois à l'intérieur, vous ne faites que mettre à jour la valeur du product .

  • Une fois que vous avez terminé avec la boucle, vous pouvez utiliser l'instruction return pour renvoyer la valeur du product .

  • Enfin, à des fins de test, vous pouvez commencer avec une petite valeur de n , comme 4, et imprimer les valeurs que vous calculez dans la boucle pour vérifier le fonctionnement de votre code.

Il y a des manières plus concises et pythoniques de le faire, mais cela utilise la structure de code que vous avez déjà mise en place. Et bien sûr récursivement ainsi que vous mentionnez aussi.

Une fois que vous maîtrisez les bases, vous apprécierez les manières plus idiomatiques d'écrire ceci, ou appelez les fonctions appropriées qui le font pour vous.


Answer #3

Vous essayez de trouver la factorielle d'un nombre n, essentiellement. Pour trouver la factorielle d'un nombre, il y a 2 méthodes

  1. Utilisation d'une structure de boucle
  2. Utilisation de la récursivité (comme vous l'avez mentionné)

En tant que nouveau programmeur, vous feriez mieux d'avoir une structure de boucle simple qui va de 1 à n et place la valeur multipliée à chaque itération dans une variable. Cette variable est votre réponse. Mais sachez aussi que la récursivité fonctionnera également et rendra le code élégant. Bonne programmation!


Answer #4

Une autre méthode consiste à utiliser scipy.product .

>>> import scipy
>>> scipy.product(xrange(1,11))
3628800

Answer #5
 def factorial(n):
     if n <= 1: return 1
     return n * factorial(n-1)

Je pense toujours à factoriel comme l'exemple par excellence dans l'apprentissage de la récursivité ...


Answer #6

En tant qu'apprenant, vous devriez le faire sans utiliser de fonctions intégrées, il vous aidera à apprendre la programmation plutôt que l'outil comme l'apprentissage d'un outil est beaucoup plus facile si vous devenez un bon programmeur. Il y a deux façons de le faire J'ai implémenté des versions plus simples.

En utilisant la récursivité:

def product(n):
    if n== 1:
        return 1
    return n * product(n-1)

Utilisation de la boucle simple:

def product(n):
    res = 1
    while n>1:
        res = res * n
        n = n - 1
    return res

Answer #7

C'est ce qu'on appelle le factoriel . dix! est équivalent à 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 .

def factorial(n):
    product = 1
    while n > 0:
        product *= n
        n -= 1
    return product

En passant, en pratique, utilisez simplement math.factorial .





sequence