IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Nombre aléatoire Python premiere S


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 9
    Par défaut Nombre aléatoire Python premiere S
    Bonsoir !

    Désolé d'avance si le sujet est dans la mauvaise catégorie du forum :/

    Je dois faire un programme en Python qui pour un nombre X (dans mon exo 10 000) de lancé de flechette dois me dire combien de fois j'ai touché la cible bleu

    il me faut donc X et Y axe des abscisses et ordonnés ?

    après je bloque : /

    J'ai trouvé quelque chose comme ceci

    Inport random #nombre aléatoire

    A=0
    B=0
    X=0
    Y=0
    N=int(input("nombre de calculs ?"))
    while (A!=N):
    X=random random ()
    Y=random random ()

    D=((X**2)+(Y**2))
    if D<1
    B=B+1

    A=A+1
    C=B/A

    Print ("La fréquence du nombre d'impacts dans la cible est" ,C)

    Je ne sais pas si c'est juste, je voudrais comprendre
    Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    C'est une blague, ce code, ou pas ?
    Il y a des erreurs partout !
    import, ":", majuscules !!!

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 9
    Par défaut
    Bonsoir Marco056,

    Merci pour votre réponse,

    Ce "code" n'est pas une blague, je suis élève en première S et je n'ai pas un niveau élevé en programmation informatique

    Pouvez vous m'aider je ne sais pas en m'expliquant les bases ou me donner des astuces afin de bien m'organiser afin de mener à bien l'exercice s'il vous plait ?

    Merci

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 9
    Par défaut
    C'est en fait une petite question d'un exercice en fait , l'exercice en lui même n'est pas porté sur la programmation pure


    Jeu de fléchettes et simulation : méthode de Monte Carlo

    On lance des fléchettes sur une cible carrée. Cette cible comporte également un quart de cercle, de rayon égal au côté du carré.
    On effectue plusieurs tirs et on dénombre les impacts se trouvant dans le quart de cercle.
    On suppose que l’on atteint toujours la cible.

    (𝑶 ;𝒊⃗;𝒋⃗) est un repère orthonormé.

    1°) On simule cette expérience à l’aide d’une calculatrice. Pour cela, on choisit au hasard un couple (𝒙 ; &#119962 avec 𝒙 et 𝒚 compris entre 0 et 1 et on appelle M le point de coordonnées (𝒙 ; &#119962 dans (𝑶 ;𝒊⃗;𝒋⃗)

    A chaque lancer on fait le test suivant : 𝒙² + 𝒚² est-il inférieur à 1 ? puis on compte les coups pour lesquels le test est réalisé et on calcule la fréquence des impacts dans la cible.

    a) Ecrire un algorithme qui réalise cette simulation, c’est-à-dire qui affiche le point d’impact s’il est dans la zone bleue et qui calcule la fréquence des impacts dans la cible.

    b) Traduire cet algorithme en langage Ti et en Python.

    c) Simuler une série de 10 000 lancers. Quelle est la fréquence observée ? On fera une saisie de l’écran.
    Images attachées Images attachées  

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Ce que dit Marco, c'est que lorsqu'on présente un code ici, on présente qqch qui compile.
    C'est à dire un code où Python ne crash pas une erreur même si le résultat attendu n'est pas celui escompté.

    Donc il faut commencer par là.

    Et ensuite utiliser les balises [CODE] pour poster votre code (le bouton avec le #, lorsque vous postez). Personne n'ira copier/coller votre code pour se retaper l'indentation à la main !

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Juste un coup de pouce.

    Le module qui permet de tirer au hasard est "random", et sa fonction qui permet de tirer un nombre au hasard entre 0.0 et 1.0 est "random".

    Le code doit donc importer cette fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from random import random
    Chaque tirage pour x et y est donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x = random()
    y = random()
    Le test se calcule comme ça:

    (On pourrait aussi avoir x**2+y**2<=1.0, mais les multiplications sont plus rapides que les puissances)

    Il reste à faire une boucle (for...), et de compter le nombre de fois où le test est vrai

    Le % de fois où ce test sera vrai correspondra, aux écarts dus au hasard près, au rapport des surfaces, soit avec R=1 => (pi*R*R/4)/(R*R) = 0.7853981633974483

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Par défaut
    Voici ce que je propose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #Désolé je ne peux pas donner la solution....Je me suis fait réprimander, voir les posts suivants :)
    J'espère que ça fait le job

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par micpo457 Voir le message
    C'est en fait une petite question d'un exercice en fait , l'exercice en lui même n'est pas porté sur la programmation pure
    Comme bien souvent la majorité des exercices. Déjà la programmation n'est pas un but en soi. Elle est là pour répondre à un besoin en calculs ou en simulations d'évènements naturels. Et donc (sauf exceptions liées à l'apprentissage du langage), les exercices essayent eux aussi de correspondre à ce schéma (ne serait-ce que pour rendre le truc un tant soi peu concret quoi...)


    Citation Envoyé par micpo457 Voir le message
    Jeu de fléchettes et simulation : méthode de Monte Carlo

    A chaque lancer on fait le test suivant : 𝒙² + 𝒚² est-il inférieur à 1 ? puis on compte les coups pour lesquels le test est réalisé et on calcule la fréquence des impacts dans la cible.

    a) Ecrire un algorithme qui réalise cette simulation, c’est-à-dire qui affiche le point d’impact s’il est dans la zone bleue et qui calcule la fréquence des impacts dans la cible.

    b) Traduire cet algorithme en langage Ti et en Python.

    c) Simuler une série de 10 000 lancers. Quelle est la fréquence observée ? On fera une saisie de l’écran.
    Bah, ton code d'origine n'était pas très loin. Ne manquait en fait qu'une question de syntaxe (les tabulations, les ":" terminant chaque bloc "if" ou "for"). Et surtout les balises nécessaires sur ce forum pour qu'il affiche un code source tel qu'on l'a écrit dans la réalité (surtout en Python où le décalage des lignes permettant de distinguer "en" et "hors" bloc sont hyper importantes !!!)

    Citation Envoyé par tyrtamos Voir le message
    ...soit avec R=1 => (pi*R*R/4)/(R*R) = 0.7853981633974483
    Euh... avec R=2 ou R=10 c'est un peu pareil non ???

    Citation Envoyé par Fawn_noOb_wxPython Voir le message
    from __future__ import division #Pour afficher les float lors de la division
    Pas pour "afficher", mais pour "calculer".

    Citation Envoyé par Fawn_noOb_wxPython Voir le message
    J'espère que ça fait le job
    Oui ben justement, t'es pas là pour "faire le job" des autres, mais pour les aider à ce qu'ils arrivent à le faire par eux-mêmes (voir le chapitre IV des règles du forum)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Oui ben justement, t'es pas là pour "faire le job" des autres, mais pour les aider à ce qu'ils arrivent à le faire par eux-mêmes (voir le chapitre IV des règles du forum)
    Je n'ai fait que traduire son algo (correct) en python...

    Ah oui en effet

    Nous ne sommes pas là pour faire vos exercices.
    Entendez par là que nous serons bien évidemment tout à fait d'accord pour vous aider à résoudre votre problème, pour autant que vous fassiez vous-même des efforts.
    Ok je supprime mon code

    Même si je trouve que l'effort a déjà été fourni puisque son algo est bon...Et ce n'est pas un étudiant en informatique...

  10. #10
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour Sve@r,

    Citation Envoyé par Sve@r Voir le message

    Euh... avec R=2 ou R=10 c'est un peu pareil non ???
    Bien sûr! J'avais commencé par mettre (pi*1*1/4)/(1*1) et puis je me suis dit que ce n'était pas assez clair. Alors, j'ai (mal) corrigé.

  11. #11
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Citation Envoyé par micpo457 Voir le message
    Bonsoir Marco056,

    Merci pour votre réponse,

    Ce "code" n'est pas une blague, je suis élève en première S et je n'ai pas un niveau élevé en programmation informatique

    Pouvez vous m'aider je ne sais pas en m'expliquant les bases ou me donner des astuces afin de bien m'organiser afin de mener à bien l'exercice s'il vous plait ?

    Merci
    On avait compris que ton niveau n'était pas élevé mais de là à poster un code où il y a des fautes partout, il y a des limites.
    Le minimum, c'est de le tester chez toi avant de le poster entre balises #.
    Pour le tester, il y a des choses simples comme spyder, edupython, ... : la programmation, c'est comme le reste, il faut s'entraîner pour réussir et une feuille de papier ne suffit pas.
    Bon courage. J'aurai également un programme à proposer lorsque tu auras trouvé la solution.

  12. #12
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Par défaut
    Voilà je pense qu'assez de temps a passé pour donner une solution, je trouve les gens un peu prétencieux et plutôt durs avec un élève de 1ere....

    Bref voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    # coding: utf8
    from __future__ import division #Pour calculer les float lors de la division sous Python 2.x, sous Python 3.x supprimer cet import
    import random #nombre aléatoire 
     
     
    nb_lances=0
    nb_touches=0
    nb_draw=0
    nb_out=0
    X=0
    Y=0
    limite=int(input("nombre de tirs ?"))
     
    while (nb_lances!=limite):
        X=round(random.uniform(0, 1.0), 1)#Precision des tirs (ici 1 chiffre apres la virgule)
        Y=round(random.uniform(0, 1.0), 1)
     
        D=((X*X)+(Y*Y))
     
        if D<=1: #Lances qui touchent la cible
            nb_touches+=1
            print u"impact au point X : "+str(X)+" Y : "+str(Y)
     
        if D==1: #Lances qui touchent la limite
            nb_draw+=1
     
        if D>=1: #Lances qui ne touchent pas la cible
            nb_out+=1
     
        nb_lances+=1
     
    frequence=float(nb_touches/nb_lances)*100 #En pourcentage
     
    print u"La fréquence du nombre d'impacts dans la cible est : "+str(frequence)+"%"
     
    #Petit bonus d'affichage histoire de...
    print  u"lances : "+str(nb_lances),u"touche : "+str(nb_touches), u"draw : "+str(nb_draw),u"out : "+str(nb_out)

  13. #13
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Citation Envoyé par Fawn_noOb_wxPython Voir le message
    Voilà je pense qu'assez de temps a passé pour donner une solution, je trouve les gens un peu prétentieux et plutôt durs avec un élève de 1ere....
    Donner la solution n'a aucun intérêt puisque, de toutes façons, le professeur donnera un corrigé.
    Et côté apprentissage de la programmation, ce n'est pas tant trouver une solution qui est important mais tout ce qu'on va apprendre en essayant de réfléchir à comment la coder, découvrir les injures de Python lorsqu'on tape n'importe quoi et apprendre à relire ce qu'on a tapé.

    Relisez le code donné dans le premier post, il est manifeste que l'auteur n'a pas essayé de faire tourner son programme car il plante dès la première ligne. Donc quelque part, il a bien réfléchi à comment coder mais n'ose pas affronter l'interpréteur Python pour essayer de lui faire avaler sa prose.

    Et ce n'est pas en lui donnant une solution qu'on arrivera à le motiver à mettre les mains dans le cambouis.
    note: il faut faire la différence entre "se faire plaisir à poster des solutions" et "essayer de motiver les gens à la construire par eux même".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  14. #14
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Fawn_noOb_wxPython Voir le message
    Voilà je pense qu'assez de temps a passé pour donner une solution, je trouve les gens un peu prétencieux et plutôt durs avec un élève de 1ere....
    Est-ce être prétentieux que de faire respecter les règles (dans lesquelles, soit dit en passant, il n'y a aucune notion de "limitation" quelconque dans la durée) ???
    Surtout que ces règles n'ont d'autre but que d'éviter les tricheries et la fainéantise. Et être élève de 1ère n'est pas une excuse surtout de 1ère où on est à deux doigts d'entrer dans la vie active.
    En tout cas, nous au-moins nous savons écrire correctement cet adjectif.

    Citation Envoyé par Fawn_noOb_wxPython Voir le message
    Bref voici le code :
    Moi, ce que je trouve prétentieux, c'est de vouloir à tout prix montrer son code. C'est bon, on a compris que tu savais l'écrire. Mais franchement, il n'y a pas de quoi la ramener. Par exemple pourquoi initialiser X et Y à 0 ? Et pourquoi alors ne pas initialiser aussi D ??

    Citation Envoyé par Fawn_noOb_wxPython Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    frequence=float(nb_touches/nb_lances)*100 #En pourcentage
    ...
    #Petit bonus d'affichage histoire de...
    print  u"lances : "+str(nb_lances),u"touche : "+str(nb_touches), u"draw : "+str(nb_draw),u"out : "+str(nb_out)
    Ouais, vraiment pas de quoi !!! Déjà pourquoi mettre en "float" une division qui, si l'import se fait, sera alors faite en float et s'il ne se fait pas, sera alors calculée en entier. Et pour l'affichage des chaines, il y a plus simple print u"lances : %d, touche : %d, draw : %d, out : %d" % (nb_lances, nb_touches, nb_draw, nb_out)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. p'tite question de cryptage ( nombre aléatoire )
    Par smyley dans le forum Algorithmes et structures de données
    Réponses: 53
    Dernier message: 08/11/2004, 10h07
  2. Nombres aléatoires
    Par Mat 74 dans le forum Assembleur
    Réponses: 20
    Dernier message: 29/08/2004, 13h31
  3. recherche algo de génération de nombre aléatoire
    Par Pascale38 dans le forum MFC
    Réponses: 2
    Dernier message: 26/01/2004, 14h20
  4. Nombre aléatoire en SQL
    Par sqlnet dans le forum Langage SQL
    Réponses: 8
    Dernier message: 19/08/2003, 12h38
  5. Générer un nombre aléatoire entre 0 et 1 (INCLUS !!!)
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/08/2002, 16h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo