Partage
  • Partager sur Facebook
  • Partager sur Twitter

récupérer les données inscrites dans la console

7 septembre 2022 à 14:45:14

bonjour je viens de créer un programme permettant de trouver la décomposition en facteur premier d'un nombre.

mais j'aimerais savoir si c'est possible quand on lance le programme d'envoyer un message du style "quelle est la nombre que vous voulez décomposer"

et de pouvoir ensuite taper un nombre et ce nombre pouvoir le mettre à la variable nombre,

voici mon code

nombre = 600
diviseur = 2

print("facteur premier de" ,nombre ,"est")
while diviseur<=nombre:
  if nombre%diviseur==0:
    nombre=nombre/diviseur
    print(diviseur ,end=" ")
  else:
    diviseur = diviseur +1



  • Partager sur Facebook
  • Partager sur Twitter
7 septembre 2022 à 15:13:34

print et input sont faits pour ça.
  • Partager sur Facebook
  • Partager sur Twitter
7 septembre 2022 à 15:57:32

j'ai utiliser input mais j'ai cette erreur depuis 

TypeError: '<=' not supported between instances of 'int' and 'str'

print("quelle est le nombre que vous voulez décomposer")

nombre = input()
diviseur = 2

print("facteur premier de" ,nombre ,"est")
while diviseur<=nombre:
    if nombre%diviseur == 0 :
        nombre=nombre/diviseur
        print(diviseur ,end=" ")
    else:
        diviseur = diviseur +1



  • Partager sur Facebook
  • Partager sur Twitter
7 septembre 2022 à 16:27:10

input retourne une chaîne de caractères à convertir en int pour l'utiliser comme entier.

Pour apprendre les bases de Python, il serait plus efficace d'ouvrir un tutoriel. Les bons vous présentent les outils à utiliser avant de vous proposer des exercices. Et feuilleter quelques pages va bien plus vite que de demander de l'aide dans un forum pour des trucs aussi triviaux.

  • Partager sur Facebook
  • Partager sur Twitter
7 septembre 2022 à 16:42:07

Bonjour,

De plus, tu peux inclure la question dans input()

n = input('Quel est ton nom ? : ')

Ça évite le print juste avant

De plus, avec ton code un même diviseur peut apparaitre 2 fois, exemple avec nombre = 12:

2

2

3

Moi, à la place de ta ligne 10, je mettrais les diviseurs dans une liste et donc je

testerais si le diviseur n'y est pas déjà avant de l'ajouter

Et à la fin, on imprime la liste

-
Edité par Phil_1857 7 septembre 2022 à 17:10:11

  • Partager sur Facebook
  • Partager sur Twitter
7 septembre 2022 à 17:47:49

Écrire:
nombre = int(input("Quel est le nombre? "))
On n'a pas besoin de se rendre jusqu'au nombre avec les diviseurs, on s'arrête à la racine carrée.
Si diviseur est un diviseur de nombre, nombre//diviseur l'est également.
Attention aux carrés parfaits. On retrouvera le diviseur deux fois.

Ensuite:

    nombre=nombre/diviseur

Ce n'est pas une division entière, il faut mettre // au lieu de /

Tu parles de "facteurs premiers", mais ton code donnera la liste des diviseurs. Ce n'est pas la même chose.

Et que feras-tu si le nombre est premier?

-
Edité par PierrotLeFou 7 septembre 2022 à 19:23:56

  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

8 septembre 2022 à 17:50:28

Voici une version qui ne considère que les facteurs de la forme  6*k ± 1  pour les facteurs premiers:

C'est  évidemment avec les grands nombres premiers que ce code sera le plus lent.
-
def extraire(premiers, nombre, facteur):
    compte = 0
    while nombre % facteur ==0:
        compte += 1
        nombre //= facteur
    if compte: premiers.append((facteur, compte))
    return nombre
 
nombre = int(input("Quel est le nombre ? "))
premiers = []
nombre = extraire(premiers, nombre, 2)
nombre = extraire(premiers, nombre, 3)
for facteur in range(5, int(nombre**0.5+0.5)+1, 6):
    nombre = extraire(premiers, nombre, facteur)
    nombre = extraire(premiers, nombre, facteur+2)
if nombre > 1: extraire(premiers, nombre, nombre)
print(" * ".join(f"{f}**{e}" for f, e in premiers))

-
Edité par PierrotLeFou 8 septembre 2022 à 18:02:54

  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.