Partage
  • Partager sur Facebook
  • Partager sur Twitter

Besoin d'aide et d'information

Python- generateur de calcul mental

    4 mai 2016 à 10:27:45

    Bonjour, j'ai créé un générateur de calcul mental avec différents modes:classique,arcade,course et time attack(pas encore fini).Le but du mode arcade est d'enchainé le plus de calculs sans faire d'erreurs,si l'utilisateurs en fait le jeu s'arrête. Je voudrais donc savoir si c'était possible de mettre une boucle for i in range (des qu'il fait un erreur) ou si c'était preferable de mettre un grand nombre a la place dans la boucle. De plus je voudrais savoir comment faire pour que le générateur, en mode course, reste sur le meme calcul jusqu'a ce que l'utilisateur trouve la bonne réponse avant de passer au calcul suivant. Et enfin, je souhaiterais savoir comment faire pour mettre des difficultés,c-a-d que l'utilisateur choisi le niveau de difficulté:facile,normale,difficile; avant le choix mode pour les calculs se fassent en fonction de la difficulté choisi. Vu que c'est un projet bac, si vous avez des idées intéressantes, n'hésitez pas à les proposer. Merci pour votre aide, elle me sera d'une grande utilité.  


    # Imports
    from random import randint
    import time
    from math import*
    
    # Fonctions
    def menu():
        print ("Tapez:")
        print ("1 pour le mode classique")
        print ("2 pour le mode arcade")
        print ("3 pour le mode course")
        print ("O pour quitter")
    
    def classique():
        score=0
        for p in range(20):
            a, b, signe = randint(1,20), randint(1,10), randint(1,3)
            if signe==2 and a<b: # En cas de soustraction : a doit être > b
                a,b=b,a
    
            operation='%d %s %d' % (a , '_+-*'[signe] , b)
    
            resultat=eval(operation)
    
            question='Operation %d : %s = ?  ' % (p+1,operation)
            resultat2=int(input(question))
    
            score+=(resultat2==resultat) 
        print (score,'/20')
        return
            
    def arcade():
        score=0
        p=0
        while p < 50:
            a, b, signe = randint(1,20), randint(1,10), randint(1,3)
            if signe==2 and a<b: # En cas de soustraction : a doit être > b
                a,b=b,a
            operation='%d %s %d' % (a , '_+-*'[signe] , b)
    
            resultat=eval(operation)
    
            question='Operation %d : %s = ?  ' % (p+1,operation)
            resultat2=int(input(question))
            
            if resultat2 == resultat:
                score=score+1
                p=p+1
            else:
                score=score
                p=p+1
                print ("Votre score est de",score)
                break
    
    def course():
        score=0
        debut=time.time()
        for p in range(20):
            a, b, signe = randint(1,20), randint(1,10), randint(1,3)
            if signe==2 and a<b: # En cas de soustraction : a doit être > b
                a,b=b,a
    
            operation='%d %s %d' % (a , '_+-*'[signe] , b)
    
            resultat=eval(operation)
    
            question='Operation %d : %s = ?  ' % (p+1,operation)
            resultat2=int(input(question))
            
    
            score+=(resultat2==resultat)
    
        fin=time.time()
        temps=ceil(fin-debut)
        print ('Vous avez mis',temps,'secondes pour faire les 20 calculs')
        return
            
    
    menu()
    choix=int(input('Sasir votre choix : '))
    if choix==1:
        classique()
    if choix==2:
        arcade()
    if choix==3:
        course()



    -
    Edité par lasyvegasy 4 mai 2016 à 10:28:47

    • Partager sur Facebook
    • Partager sur Twitter
      4 mai 2016 à 10:36:55

      pourquoi ne pas simplement faire "while not error:" ?  (équivalent à "while error == False")

      et des qu'il fait une erreur tu passe simplement la variable error à True

      et pour course tu vérifie si l'utilisateur a le bon résultat en début de boucle si c'est bon tu génère un nouveau calcul sinon tu ne fait rien et tu attend un nouveau input genre :

      def course():
          score=0
          answer = True
          debut=time.time()
          for p in range(20):
              if answer == True:
                  answer = False
                  a, b, signe = randint(1,20), randint(1,10), randint(1,3)
                  if signe==2 and a<b: # En cas de soustraction : a doit être > b
                      a,b=b,a
       
                  operation='%d %s %d' % (a , '_+-*'[signe] , b)
       
                  resultat=eval(operation)
       
                  question='Operation %d : %s = ?  ' % (p+1,operation)
      
              resultat2=int(input(question))
               
              if resultat2==resultat:
                   answer = True
                   score+=(resultat2==resultat)
       
          fin=time.time()
          temps=ceil(fin-debut)
          print ('Vous avez mis',temps,'secondes pour faire les 20 calculs')
          return



      -
      Edité par SaltyYuki 4 mai 2016 à 11:14:36

      • Partager sur Facebook
      • Partager sur Twitter
        4 mai 2016 à 12:41:20

        Merci pour le code que tu viens de me passer mais enfaite ils sautent des questions. Ceux que je veux c'est qu'il y'ait 20 différents calculs.

        • Partager sur Facebook
        • Partager sur Twitter
          4 mai 2016 à 13:04:31

          Ah oui pardon tu remplace ton for par while et tu rajoute une variable qui s'incrémente à chaque bonne réponse .

          def course():
              score=0
              answer = True
              nbr = 0
              debut=time.time()
              ##tant qu'il n'y à pas 20 bonnes réponses boucle
              while nbr != 20:
                  if answer == True:
                      answer = False
                      a, b, signe = randint(1,20), randint(1,10), randint(1,3)
                      if signe==2 and a<b: # En cas de soustraction : a doit être > b
                          a,b=b,a
            
                      operation='%d %s %d' % (a , '_+-*'[signe] , b)
            
                      resultat=eval(operation)
            
                      question='Operation %d : %s = ?  ' % (p+1,operation)
           
                  resultat2=int(input(question))
                    
                  if resultat2==resultat:
                       ##Compte le nombre de bonne réponse
                       nbr += 1
                       answer = True
                       score+=(resultat2==resultat)
            
              fin=time.time()
              temps=ceil(fin-debut)
              print ('Vous avez mis',temps,'secondes pour faire les 20 calculs')
              return



          • Partager sur Facebook
          • Partager sur Twitter
            5 mai 2016 à 13:42:43

            Bonjour, j'ai quelque difficultés à créer le mode time attack donc j'aimerai  bien savoir comment créer un compte à rebours qui une fois le temps écoulé, arrête le programme. Merci pour votre aide. 
            • Partager sur Facebook
            • Partager sur Twitter
              5 mai 2016 à 14:48:11

              Je pense que tu devrais regarder du côté des Threads pour ça, tu pourras ainsi faire un compte à rebours qui s'exécute en parallèle de ton programme, et qui pourra éventuellement le stopper :)
              • Partager sur Facebook
              • Partager sur Twitter
                5 mai 2016 à 17:07:30

                Ok je vais jeter un coup d'oeil. Merci :)
                • Partager sur Facebook
                • Partager sur Twitter
                  9 mai 2016 à 16:15:59

                  Il n'y aurait pas une methode plus simple? Juste avec le module Time? Merci
                  • Partager sur Facebook
                  • Partager sur Twitter
                    10 mai 2016 à 13:45:54

                    Une autre solution serait de lancer time.time() et de vérifier régulièrement sa valeur, mais après, comment définir "régulièrement", c'est à toi de voir ^^
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 mai 2016 à 18:04:46

                      Bonjour, pourriez vous m'indiquer comment fonction cette portion de code surtout celles avec les "%" svp?On la retrouve dans mon code ci dessus. J'ai une idée mais je ne suis pas sur... merci pour votre aide. 
                       operation='%d %s %d' % (a , '_+-*'[signe] , b)
                         
                                  resultat=eval(operation)
                         
                                  question='Operation %d : %s = ?  ' % (p+1,operation)

                      -
                      Edité par lasyvegasy 16 mai 2016 à 18:05:20

                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 mai 2016 à 9:09:27

                        Les %d  vont être remplacer par les valeurs dans les parenthèse

                        par exemple :

                         operation='%d %s %d' % (a , '_+-*'[signe] , b)
                        vas devenir
                        a = 2
                        b = 5
                        
                        operation='2 + 5'
                        Les %s je ne suis pas sur de ce qu'il font exactement


                        • Partager sur Facebook
                        • Partager sur Twitter
                          17 mai 2016 à 10:12:41

                          lasyvegasy a écrit:

                          j'aimerai bien savoir comment créer un compte à rebours qui une fois le temps écoulé, arrête le programme.

                          En console, faire un timer est au-delà de tes compétences. La raison est que la fonction input est bloquante, ç-à-d que tant que l'utilisateur n'a pas entrer quelque chose, ton programme n'a plus la main, mais l'OS.

                          Je vois deux possibilités:

                          • Tu fais ton programme dans un GUI genre Tkinter qui te permettra de gérer le temps.
                          • Tu acceptes que l'utilisateur puisse mettre 3h à répondre, mais une fois qu'il a répondu, tu regardes le temps qui s'est écoulé et tu décides si on passe à la question suivante ou si on va à un GAME OVER.

                          Pour cette 2ème solution tu dois donc utiliser la fonction time du module time, comme montré en exemple par Racers.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            18 mai 2016 à 7:44:50

                            Merci beaucoup pour vos réponses !

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Besoin d'aide et d'information

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown