Forum Programmation.python Quelques difficultés

Posté par . Licence CC by-sa.
Tags : aucun
1
17
fév.
2019

M'intéressant de prés au raspberry PI et donc au langage python ( sur lequel je suis un grand débutant) j 'ai souscrit a des cours dont on donne des exo.
Seulement, je n ai aucune solution pour comparer avec ma réponse.
Dans ce cadre là, je "sèche" lamentablement sur deux exo ( 18 de réussi qd mm )
je vous soumets le premier pour voir ce que vous pensez de celui-ci :
le thème :
Variante de l'exercice "Carré de 'X'", afficher le triangle supérieur droit, comme suit (pour n = 6):
on introduit une valeur pour déterminer le nombre de x et donc le nombre de ligne.
ce qui me fait buter c le décalage.

XXXXXX
-XXXXX
--XXXX
---XXX
----XX
-----X
le moins symbolise espace vide, car a l affichage quand je fais des espaces cela ne fonctionne pas

Carré de x réussi d ailleurs voici le code.

a="X"
n=int(input())
total = 0
ligne = 0
while ligne<=n-1:
print(a*n)
ligne = ligne +1
#n=n-1

Si quelqu'un pouvais me donner un coup de main, ce serait super

Le deuxième problème est plus orienté math,et mes souvenirs math sont très très loin :
Enoncé
On peut calculer approximativement le sinus de x (voir définition du sinus) en effectuant la sommation des n premiers termes de la série (c'est-à-dire la somme infinie) :
sin(x)=x−x/33!+x/55!−x/77!+…
où x est exprimé en radians.
On vous demande d'écrire un code qui lit une valeur flottante (float) x en entrée et qui imprime une approximation de sin(x).

Votre code additionne les termes successifs dans la série jusqu'à ce que la valeur d'un terme devienne inférieure (en valeur absolue) à une constante ϵ (prenez ϵ=10−6). Affichez (imprimé) ensuite l'approximation ainsi obtenue.

Attention : Calculer explicitement la valeur des factorielles peut poser des soucis lorsque vous utilisez les valeurs pour des calculs avec des float. Si c'est le cas, pensez à une autre façon de faire !

  • # index de la ligne

    Posté par . Évalué à 1 (+0/-0). Dernière modification le 17/02/19 à 17:17.

    Ton décalage c'est juste l'index de la ligne en cours de traçage (en considérant que ta première ligne est à l'index 0)

    edit : mais ici, tu t'accordes des "demi" caractères de décalage, c'est prévu comme ça dans l'exercice ?

    • [^] # Re: index de la ligne

      Posté par . Évalué à 1 (+0/-0).

      bonjour,
      merci pour la réponse pour l instant.
      Non,; de moins c est parce que l affichage du forum ne prend pas les espaces vides j ai mis un caractère de substitution pour représenter la figure telle que l on demande.
      Index ?, je débute je trouve que les cours sont un peu hard surtout en math.
      Nous avons vu pour l instant les variables, les boucles ( while , for), les conditions(if) de comparaison, mais rien d autre.
      Donc comme précisé grand débutant.
      Alors ça plane un peu, sorry

      • [^] # Re: index de la ligne

        Posté par . Évalué à 1 (+0/-0).

        Ce que j'appelle index c'est juste le numéro de la ligne. Ligne 0 pour la ligne du haut, puis ligne 1, ligne 2 etc.
        On voit qu'on a bien 0 décalage, puis 1 décalage, puis 2 etc. sur chaque ligne. Tu peux faire ça dans une boucle for allant de 0 à n - 1.
        Sauf que si tu travaille en mode "console" avec des caractères qui font tous la même largeur, il faudra enlever 2 "X" à chaque lignes au lieu d'un seul (et ajuster la boucle for en conséquence, puisque deux fois moins de ligne à afficher), sinon tu aura un triangle avec une ligne verticale. Je ne sais pas ce réclame l'exercice exactement.

        • [^] # Re: index de la ligne

          Posté par . Évalué à 3 (+1/-0).

          Sauf que si tu travaille en mode "console" avec des caractères qui font tous la même largeur, il faudra enlever 2 "X" à chaque lignes au lieu d'un seul

          heuu … ben non. L'affichage sur linuxfr dans le post initial n'est pas correct parce que la fonte est variable. Avec une fonte fixe, ça marche très bien

          XXXXXX
           XXXXX
            XXXX
             XXX
              XX
               X
          
          • [^] # Re: index de la ligne

            Posté par . Évalué à 1 (+0/-0).

            Ça marche si tu veux un triangle comme le tien (triangle rectangle avec un coté vertical). Si tu en veut un comme le sien (isocele), il faut faire autrement. D'où ma remarque.

            • [^] # Re: index de la ligne

              Posté par . Évalué à 2 (+0/-0).

              Si tu en veux un comme le sien (isocele)

              justement, ce que je pointais, c'est que c'est la fonte variable qui donne l'impression d'un triangle isocèle. Dans l'exemple donné, il y a bien 6 caractères pour chaque ligne.

              • [^] # Re: index de la ligne

                Posté par . Évalué à 1 (+0/-0). Dernière modification le 18/02/19 à 20:09.

                J'ai bien compris. C'est pour ça que je lui ai proposé les deux approches.
                Ça peut durer longtemps encore comme ça, on va s'arrêter là je pense :)

  • # Cours en ligne ?

    Posté par (page perso) . Évalué à 3 (+1/-0).

    j 'ai souscrit a des cours

    Peux-tu nous en dire plus à ce sujet ?

    • [^] # Re: Cours en ligne ?

      Posté par . Évalué à 3 (+2/-0). Dernière modification le 18/02/19 à 07:52.

      je crois avoir reconnu le MOOC de l'ULB sur python que je suis également, mais j'au préféré celu ide l'INRA.
      Bref, https://www.fun-mooc.fr/courses/course-v1:UCA+107001+session02/about

      Bref, pour répondre à la question, je crois que le script était:
      Sans espace au début:

      #!/usr/bin/env python
      
      a=int(input())
      
      while a>0:
          print a*'X'
          a-=1

      et avec espacement:

      #!/usr/bin/env python
      
      a=int(input())
      space=0
      while a>0:
          print space*" "+a*'X'
          a-=1
          space+=1
      • [^] # Re: Cours en ligne ?

        Posté par . Évalué à 1 (+0/-0).

        Concernant le sinus, arguant que la fonctione factorielle inverse allait tendre vers 0 , j'ai limité les iterations
        for i in range(10):
        deltasin=(a*j/math.factorial(j))-(a*(j+2))/math.factorial(j+2)
        sin=sin+deltasin
        j+=4

        On voit bien que la formule est
        +(x1) / 1! − (x3) / 3!
        donc si n=1
        +(xn) / n! - (xn+2) / (n+2)!
        Puis le même calcul
        avec 5
        puis 9
        Donc c'est le delta calculé à chaque boucle, puis j'incrémente de 4

    • [^] # Re: Cours en ligne ?

      Posté par . Évalué à 3 (+2/-0).

      le cours sur fun-mooc est (pour cet exercice) : Apprendre à coder avec Python

  • # Sinus

    Posté par . Évalué à 1 (+0/-0).

    Bonsoir,

    Concernant le deuxième problème, je soupçonne une erreur dans l’énoncé, voici la formule du développement en série de taylor de sinus que je me rappelle avoir appris à l'école :
    sin(x)=x-(1/3!)*x3 + (1/5!)*x5 - (1/7!)*x7 +…

    Je pense qu'il faut faire une boucle qui calcule les termes un à la fois en les accumulant (en + ou en -) dans une variable. La fin de la boucle se produit quand le terme calculé est inférieur à la constante choisie. Le résultat à afficher est la variable accumulatrice.

    Pour que la méthode converge (qu'on sorte de la boucle), il faut préalablement tirer parti du fait que sin(x+2*toto*pi) = sin(x) pour n'importe quelle valeur de toto.

    Les histoires de factorielles et de puissance des termes peuvent être traitées en tenant compte de ce qui a déjà été calculé. Par exemple si j'ai déjà calculé le terme (1/5!)*x5 (appelons le terme5), je peux calculer le suivant (terme7) en fonction en remarquant que terme7 = (1/7!)*x7 = (1/5!)/(6*7)*x5 * x2 donc terme7 = terme5/(6*7)*x2 .

    Bon courage.

    • [^] # Re: Sinus

      Posté par . Évalué à 1 (+0/-0).

      Bonsoir
      Effectivement c est bien le MOOC.Merci pour vos encouragements
      Je reproche un peu la démarche trop mathématique pour ce genre d'apprentissage. je suis plus orienté en besoin en gestion d’événements ou encore en traitement des bases de données, mes connaissances en python étant non complète, je me suis orienté vers ce type de formation.
      En tout cas je vais essayer votre démarche qui me semble très logique.
      Merci encore une fois a tous pour votre soutien.
      Je regarderai d 'un peu plus prêt votre formation.

      • [^] # Re: Sinus

        Posté par . Évalué à 1 (+0/-0).

        Idem je zuis un peu déçu de celui là. Je crois que le mooc de l'inra est toujours dispo, je l'ai fini et je l'ai trouvé plus pédagogique. Peut être te correspondera t'il mieux ?

      • [^] # Re: Sinus

        Posté par . Évalué à 1 (+0/-0).

        Voilà l'autre cours qui est plus interessant, plus progressif, et qui porte moins sur les maths :(ou alors sur des fonctions assez simples)
        Python 3 : des fondamentaux aux concepts avancés du langage

    • [^] # Re: Sinus

      Posté par . Évalué à 1 (+0/-0).

      Pour le calcul du sinus voici ma solution :
      x = float(input())
      e = 1
      factorielle = 1
      inverseabs=2 #module positif si 4 et négatif si 2
      i=1
      sin = 0
      while abs(e) >= 10*(-6) :
      inverseabs = (abs((inverseabs-2)-2)+2)
      indice = (inverseabs-3) // (abs(inverseabs-3)) # valeur -1 si inverseabs = 2 ou 1 si inverseabs = 4, s'inverse à chaque boucle
      if i == 1 :
      factorielle=factorielle * i
      else : factorielle = factorielle * (i-1) * i
      e = indice
      (x**i/factorielle)
      sin = sin + e
      i += 2
      print(sin)

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.