Aller au contenu

Suite numérique 1ère maths


Eleor

Messages recommandés

  • E-Bahut

Si tu mets ces instructions à la suite des fonctions, il suffit d'appeler hauteur(n) et de stocker le résultat dans une variable auxiliaire, par exemple h :
for n in range (1,1001):
    h=hauteur(n)
    if h>hmax :
        hmax=h
        nmax=i

N.B.: Pour le range, il faut ajouter 1 à la fin, c'est Python qui veut ça.

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 56
  • Created
  • Dernière réponse

Top Posters In This Topic

il y a 13 minutes, julesx a dit :

Si tu mets ces instructions à la suite des fonctions, il suffit d'appeler hauteur(n) et de stocker le résultat dans une variable auxiliaire, par exemple h :
for n in range (1,1001):
    h=hauteur(n)
    if h>hmax :
        hmax=h
        nmax=i

N.B.: Pour le range, il faut ajouter 1 à la fin, c'est Python qui veut ça.

Et donc à la fin 

Print(n) 

Pour déterminer l'entier inférieur à 1000? 

Lien vers le commentaire
Partager sur d’autres sites

il y a 11 minutes, julesx a dit :

Il faut être un peu plus loquace ! Fais une phrase pour dire ce que tu imprimes. Tu peux aussi imprimer la hauteur correspondante.

Désolée,

Comme on me demande de trouver l'entier inférieur à 1000 il faut l'afficher non ? Dans ce cas mettre "Print(n)" à la fin du programme ?

Je vous pose la question car j'ai essayé de copier coller votre programme avec le logiciel d'un intervenant "trinket.io" mais le problème c'est que je ne sais pas comment l'exécuter. Et comme on me demande de trouver un résultat je suis donc bloquée. 

J'avais aussi une autre question, chaque programme est indépendant ? Comme celui que vous venez de me faire qui commence donc par for n in range...etc

Il ne faut pas y ajouter les anciens programmes n'est ce pas ? 

Modifié par Eleor
Lien vers le commentaire
Partager sur d’autres sites

il y a 19 minutes, julesx a dit :

OK, contente toi de print(n). Pour trinket.io, une fois que tu as copié le programme, tu cliques dans le petit triangle noir au dessus.Mais copie bien l'ensemble, avc les deux fonctions vol(n) et hauteur(n).
Là, je me déconnecte pour le moment.

D'accord, je vous mets une capture car même lorsque je clique sur le triangle il ne se passe rien. 

IMG_20221114_193755.jpg

IMG_20221114_194101.jpg

Modifié par Eleor
Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut

C'est normal, tu n'as pas initialisé hmax. En plus, je ne suis pas à l'abri d'une faute de frappe. J'ai oublié de corriger un i malencontreux. Mais tu es aussi censée vérifier les scripts avant de le copier coller bêtement d'autant plus que j'ai laissé passé un oubli de nmax. Donc, je reprends, le bon script est

def vol(n):
    V=[n]
    while n>1:
        if n%2==0:
            n=n//2
        else:
            n=n*3+1
        V=V+[n]
    return V

def duree(n):
    return len(vol(n))

def hauteur(n):
    return max(vol(n))

hmax=0
nmax=0
for n in range (1,1001):
    h=hauteur(n)
    if h>hmax :
        hmax=h
        nmax=n
print(nmax)

N.B. : Il est évident qu'il faut rajouter en tête les fonctions auxquelles tu va faire appel. Python ne connait que ce qu'il y a dans le script ou ce qui est dans sa bibliothèque. Ce que tu crées n'existe que dans le script actuel ( sauf à créer un module, mais ça dépasse largement ce qu'on peut attendre à ton niveau).

Lien vers le commentaire
Partager sur d’autres sites

il y a 28 minutes, julesx a dit :

C'est normal, tu n'as pas initialisé hmax. En plus, je ne suis pas à l'abri d'une faute de frappe. J'ai oublié de corriger un i malencontreux. Mais tu es aussi censée vérifier les scripts avant de le copier coller bêtement d'autant plus que j'ai laissé passé un oubli de nmax. Donc, je reprends, le bon script est

def vol(n):
    V=[n]
    while n>1:
        if n%2==0:
            n=n//2
        else:
            n=n*3+1
        V=V+[n]
    return V

def duree(n):
    return len(vol(n))

def hauteur(n):
    return max(vol(n))

hmax=0
nmax=0
for n in range (1,1001):
    h=hauteur(n)
    if h>hmax :
        hmax=h
        nmax=n
print(nmax)

N.B. : Il est évident qu'il faut rajouter en tête les fonctions auxquelles tu va faire appel. Python ne connait que ce qu'il y a dans le script ou ce qui est dans sa bibliothèque. Ce que tu crées n'existe que dans le script actuel ( sauf à créer un module, mais ça dépasse largement ce qu'on peut attendre à ton niveau).

Oui je ne comprenais pas le i mais j'ai quand même testé pour voir. 

J'ai encore le même soucis quand je copie colle le script et que j'appuie sur le triangle en haut à gauche il ne se passe rien. 

Pourriez vous tester s'il vous plaît ? Il est probable que je ne fasse pas une bonne manipulation ne connaissant pas le logiciel mais je ne vois vraiment pas l'erreur étant donné qu'il me suffit de cliquer sur la flèche triangulaire.

IMG_20221114_205930.thumb.jpg.4354ea4c6bb74e82a07d8b2f4d3dbde0.jpg

Modifié par Eleor
Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut

Clique sur l'onglet "main" et copie le script dedans. Tu peux supprimer les autres onglet en cliquant sur la roue dentée.

Ça devrait tourner.

 

PS :

On tombe sur plusieurs sites de trinket et certains tournent plus ou moins vite.

Là, j'ai pas de problème : https://trinket.io/features/python3

Lien vers le commentaire
Partager sur d’autres sites

il y a 17 minutes, julesx a dit :

Je ne comprends pas non plus ton problème. Moi, quand j'ouvre trinket.io j'ai ça

trinket.gif.dbb621eda0544bf607ef5559d25ea3c1.gif

Je clique ici et le résultat s'affiche à droite, soit 703.

Mais j'ai main.py et shapes.py en grisé alors que toi, tu as d'autres indications

Aah! C'était donc ça!

 En effet au lieu d'avoir le programme dans main.py je l'avais sur le deuxième onglet "python" je pensais que comme c'était un programme à part il allait s'exécuter mais finalement non. Je viens donc de corriger et d'effacer ce qui se trouvait dans main.py afin de mettre le programme et cela marche. 

il y a 4 minutes, Denis CAMUS a dit :

Clique sur l'onglet "main" et copie le script dedans.

Ça devrait tourner.

Oui cela fonctionne merci.

Lien vers le commentaire
Partager sur d’autres sites

il y a 11 minutes, Eleor a dit :

Aah! C'était donc ça!

 En effet au lieu d'avoir le programme dans main.py je l'avais sur le deuxième onglet "python" je pensais que comme c'était un programme à part il allait s'exécuter mais finalement non. Je viens donc de corriger et d'effacer ce qui se trouvait dans main.py afin de mettre le programme et cela marche. 

Oui cela fonctionne merci.

Poursuivons, pour l'entier inférieur à 1000 ayant le plus long vol le script ne devrait pas beaucoup changer non ? J'ai alors remplacé les h par les v mais cela ne semble pas être tout à fait bon.

def vol(n):

    V=[n]

    while n>1:

        if n%2==0:

            n=n//2

        else:

            n=n*3+1

        V=V+[n]

    return V

 

def duree(n):

    return len(vol(n))

 

def hauteur(n):

    return max(vol(n))

 

vmax=0

nmax=0

for n in range (1,1001):

    v=duree(n)

    if v>vmax :

        vmax=v

        nmax=n

print(nmax)

Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut

Ne présente pas ton script sous cette forme sur le forum :

la mise en page et les indentations sont souvent faussées.

Utilise la balise "code" de la barre d'outil : l'icone <  > et fais un copié-collé

def vol(n):
    V=[n]
    while n>1:
        if n%2==0:
            n=n//2
        else:
            n=n*3+1
        V=V+[n]
    return V

def duree(n):
    return len(vol(n))

def hauteur(n):
    return max(vol(n))

vmax=0
nmax=0

for n in range (1,1001):
    v=duree(n)
    if v>vmax :
        vmax=v
        nmax=n
print("nmax ", nmax)
# une fois trouvée la valeur, tu peux l'exploiter

print("durée ", duree(nmax))
print("hauteur ", hauteur(nmax))
print("vol ", vol(nmax))

 

Lien vers le commentaire
Partager sur d’autres sites

Il y a 11 heures, Denis CAMUS a dit :

Ne présente pas ton script sous cette forme sur le forum :

la mise en page et les indentations sont souvent faussées.

Utilise la balise "code" de la barre d'outil : l'icone <  > et fais un copié-collé

def vol(n):
    V=[n]
    while n>1:
        if n%2==0:
            n=n//2
        else:
            n=n*3+1
        V=V+[n]
    return V

def duree(n):
    return len(vol(n))

def hauteur(n):
    return max(vol(n))

vmax=0
nmax=0

for n in range (1,1001):
    v=duree(n)
    if v>vmax :
        vmax=v
        nmax=n
print("nmax ", nmax)
# une fois trouvée la valeur, tu peux l'exploiter

print("durée ", duree(nmax))
print("hauteur ", hauteur(nmax))
print("vol ", vol(nmax))

 

Je ne connaissais pas cette fonctionnalité ici merci. Pour l'entier je trouve donc 871.

En revanche lorsque j'ajoute les 3 dernières lignes que vous m'avez ajouté pour exploiter les résultats le programme ne marche plus. 

Pour la dernière question "déterminer le plus petit entier ayant une durée de vol supérieure ou égale à 200 quelle est sa durée de vol. " J'aurai obligatoirement besoin de ces dernières lignes nn? 

Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut

Bonjour,

il y a 35 minutes, Eleor a dit :

En revanche lorsque j'ajoute les 3 dernières lignes que vous m'avez ajouté pour exploiter les résultats le programme ne marche plus. 

Si, j'ai essayé avec ton script. Mais print("vol ",vol(nmax)) affiche tous les nombres de vol, soit 179, ça fait peut-être beaucoup pour trinket.

il y a 38 minutes, Eleor a dit :

Pour la dernière question "déterminer le plus petit entier ayant une durée de vol supérieure ou égale à 200 quelle est sa durée de vol. " J'aurai obligatoirement besoin de ces dernières lignes nn? 

Non, pas forcément, tu as essentiellement besoin de vol(n) appelé par duree(n). Ensuite, il suffit de partir de n=1 et d'incrémenter n en appelant durre(n) jusqu'à ce que tu obtiennes une durée supérieure ou égale à 200. Le mieux, c'est d'employer while.

Lien vers le commentaire
Partager sur d’autres sites

il y a 54 minutes, julesx a dit :

Bonjour,

Si, j'ai essayé avec ton script. Mais print("vol ",vol(nmax)) affiche tous les nombres de vol, soit 179, ça fait peut-être beaucoup pour trinket.

Non, pas forcément, tu as essentiellement besoin de vol(n) appelé par duree(n). Ensuite, il suffit de partir de n=1 et d'incrémenter n en appelant durre(n) jusqu'à ce que tu obtiennes une durée supérieure ou égale à 200. Le mieux, c'est d'employer while.

L'entier 179 pour le vol le plus long ? Mais j'ai trouvé 871 moi. Mais sinon je suis pas obligée d'ajouter les trois dernières lignes non ? Ceux là :

print("durée ",duree(nmax))

print("hauteur ", hauteur(nmax))

print("vol ", vol(nmax))

 

Modifié par Eleor
Lien vers le commentaire
Partager sur d’autres sites

Il y a 3 heures, julesx a dit :

Oui, l'entier ayant le plus long vol est  871 et la durée de vol correspondante est  179. Et, bien sûr, tu n'as pas besoin de rajouter les 3 lignes.

 

Vous avez ajouté une ligne au script pour afficher la durée de vol nn? Car avec le mien on n'obtient que l'entier.

def vol(n):

    V=[n]

    while n>1:

        if n%2==0:

            n=n//2

        else:

            n=n*3+1

        V=V+[n]

    return V

 

def duree(n):

    return len(vol(n))

 

def hauteur(n):

    return max(vol(n))

n=1

 

n= durée (n) 

 

While n<200:

 

n=n+1

 

print("vol ", vol(nmax))

Quelque chose comme ça ?

Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut

Bonsoir,

Pas d'accent sur "durée".

Pas de majuscule à "While".

Derrière le "while", cela doit être indenté.

nmax n'est pas connu dans cet extrait de ton script précédent. (Mais il ne sert à rien pour cette partie).

 

#===============================================================
#
#             Syracuse
#
#===============================================================


#========================== calcul du vol ========================

def vol(n):
    V=[n]
    while n>1:
        if n%2==0:
            n=n//2
        else:
            n=n*3+1
        V=V+[n]
    return V

#========================= calcul de la durée ======================

def duree(n):
    return len(vol(n))

#========================= calcul de la hauteur ====================

def hauteur(n):
    return max(vol(n))

#========================= calcul de nmax ===========================

vmax=0
nmax=0

for n in range (1,1001):
    v=duree(n)
    if v>vmax :
        vmax=v
        nmax=n
#print("nmax ", nmax)

#=========================== calcul du vol <= 200 ======================

n=1

while duree(n) <= 200:
    n=n+1

print("Le plus petit entier dont la durée est >= 200 est", n)
print("Durée",duree(n))

#===============================================================

 

Lien vers le commentaire
Partager sur d’autres sites

il y a 41 minutes, julesx a dit :

@ Eleor :

Ton script ne va pas du tout. Tu désignes deux choses différentes par la variable n. Il faut distinguer le nombre n de la durée du vol. Appelle par exemple cette durée d.
Partant de là, initialise n et d puis utilise le while.

Si j'essaie avec ce que l'intervenant précèdent m'a écrit cela donne: 

 def vol(n):

    V=[n]

    while n>1:

        if n%2==0:

            n=n//2

        else:

            n=n*3+1

        V=V+[n]

    return V

def duree(n):

    return len(vol(n))

def hauteur(n):

    return max(vol(n))

n=1

 

while duree(n) <= 200:

    n=n+1

 

print(n)

print("Durée",duree(n))

Mais je ne comprends pas parce qu'il n'y a pas de distinction non plus ? 

il y a 58 minutes, Denis CAMUS a dit :

Bonsoir,

Pas d'accent sur "durée".

Pas de majuscule à "While".

Derrière le "while", cela doit être indenté.

nmax n'est pas connu dans cet extrait de ton script précédent. (Mais il ne sert à rien pour cette partie).

 

#===============================================================
#
#             Syracuse
#
#===============================================================


#========================== calcul du vol ========================

def vol(n):
    V=[n]
    while n>1:
        if n%2==0:
            n=n//2
        else:
            n=n*3+1
        V=V+[n]
    return V

#========================= calcul de la durée ======================

def duree(n):
    return len(vol(n))

#========================= calcul de la hauteur ====================

def hauteur(n):
    return max(vol(n))

#========================= calcul de nmax ===========================

vmax=0
nmax=0

for n in range (1,1001):
    v=duree(n)
    if v>vmax :
        vmax=v
        nmax=n
#print("nmax ", nmax)

#=========================== calcul du vol <= 200 ======================

n=1

while duree(n) <= 200:
    n=n+1

print("Le plus petit entier dont la durée est >= 200 est", n)
print("Durée",duree(n))

#===============================================================

 

Merci

Modifié par Eleor
Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut
il y a 8 minutes, Eleor a dit :

Mais je ne comprends pas parce qu'il n'y a pas de distinction non plus ? 

Pas de distinction entre quoi et quoi ? Ton script est correct sauf que, comme on cherche une durée supérieure ou égale à 200 la condition est while duree(n)<200.
Cela dit, ça ne change rien au résultat, c'est pour le principe.

Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut

Tu définis deux fonctions : duree et hauteur.

Les "def doivent être collés à la marge de gauche.

Pareil pour le" n=1" et le "while" qui ne font pas partie de la fonction qui les précède.

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement

×
×
  • Créer...
spam filtering
spam filtering