Partage
  • Partager sur Facebook
  • Partager sur Twitter

Programme ne fonctionnant pas sur console

Sujet résolu
    9 août 2014 à 20:51:51

    Bonjour à tous, j'ai réalisé un jeu du pendu pour un TP du cours sur Python et j'ai un petit problème avec celui-ci: le programme fonctionne très bien quand je le lance avec IDLE mais pas quand je le lance en double-cliquant dessus... Voici le code:

    reponse="Oui"
    while reponse.lower().capitalize()=="Oui": # Boucle principale, on continue le jeu tant qu'on le veut
    	i=randrange(27) 
    	mot=list(alphabet[i]) # Convertit le mot choisi en liste
    	mot_ref=list(mot)
    	
    	j=1
    	while j<len(mot): # Remplace les lettres par "*"
    		del mot[j]
    		mot.insert(j, "*")
    		j+=1
    	print("".join(mot))
    	
    	
    	chance=8
    	while chance>0 and mot!=mot_ref: # Boucle de mot, on continue à proposer une lettre tant qu'il nous reste des chances ou qu'on n'a pas trouvé
    		tentative=input("Proposez une lettre: ")
    		if len(tentative)>1 or not tentative.isalpha():
    			print("Vous n'avez pas saisi une lettre valide")
    			continue
    		
    		for position, lettre in enumerate(mot_ref): # Regarde si la lettre proposée est dans le mot
    			if tentative.lower()==lettre:
    				del mot[position]
    				mot.insert(position, tentative.lower())
    		if tentative not in mot_ref:
    			chance-=1
    			if chance>1:
    				print("Il vous reste {} chances".format(chance))
    			elif chance==1:
    				print("Il vous reste {} chance".format(chance))
    		print("".join(mot))
    		
    		
    	if mot==mot_ref: # Si le mot est trouvé
    		print("Félicitation! Vous avez trouvez le mot!")
    		
    		
    	elif chance==0: # Si le mot n'est pas trouvé
    		print("Dommage! Vous n'avez pas trouvé le mot proposé...")
    		
    		
    	reponse=input("Voulez-vous continuer? (Oui/Non)") # Demande au joueur s'il veut continuer à jouer
    	
    	
    if reponse.lower().capitalize()=="Non":
    	os.system("pause")

    Il y a en réalité deux problème: le premier est qu'il fait comme si toutes les lettres proposées n'étaient pas dans le mot et le second est que quand j'ai rajouté "if len(tentative)...", il me dit que tout ce que je saisi n'est pas valide. Pourquoi fait-il cela alors qu'il marche parfaitement avec IDLE? Merci d'avance pour votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      9 août 2014 à 22:29:46

      Salut,

      tout d'abord tu dois mettre import os des la 1ere ligne pour ne pas qu'il se ferme apres un double clique.

      • Partager sur Facebook
      • Partager sur Twitter
        9 août 2014 à 22:56:29

        Je sais, c'est fait. Mais le problème n'est pas là.

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          10 août 2014 à 16:48:27

          Ton fichier est .py ou .pyw ? En pyw c'est parfait pour les keyloggers car la console est invisible.
          • Partager sur Facebook
          • Partager sur Twitter
            10 août 2014 à 23:17:15

            J'écris mes programme avec Notepad++ donc quand je les enregistre .py et .pyw sont confondu, il n'y a pas de différenciation mais, ce sont quand même des .py. Quel est donc le problème?
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              11 août 2014 à 13:02:44

              met input() et pas os.system(pause)
              • Partager sur Facebook
              • Partager sur Twitter
                11 août 2014 à 16:13:38

                Le problème n'est pas du à ceci, le programme ne se ferme pas tout seul. Comme je l'ai dit, quand je saisi une lettre il me dit "Vous n'avez pas saisi une lettre valide"(le message que je demande d'afficher si l'entrée est de plus de 2 caractères ou si ce n'est pas une lettre) et l'autre problème c'est qu'avant il ne me mettait pas les lettres dans le mot même si elles étaient bonnes. Personne n'a la solution?
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  11 août 2014 à 18:06:21

                  Personne n'a la solution?

                  Ben ton code marche même pas, tu en as oublié des morceaux (randrange indéfini, j'ai ajouté l'import ; alphabet indéfini ligne 4, je me suis dit que t'abusais un peu :-° ). Tu aurais quand même pu nous filer un code qui permette de reproduire le problème...

                  -
                  Edité par Anonyme 11 août 2014 à 18:07:10

                  • Partager sur Facebook
                  • Partager sur Twitter
                    11 août 2014 à 18:27:10

                    Je n'ai mis que la partie du code qui est pertinante. Les initialisations n'apportent rien dans la résolution, c'est pour ça que j'en ai fait abstraction.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      11 août 2014 à 18:28:22

                      Je n'ai mis que la partie du code qui est pertinante. Les initialisations n'apportent rien dans la résolution, c'est pour ça que j'en ai fait abstraction.

                      Une partie de code qui ne se suffit pas à elle même n'est très certainement pas pertinente.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        11 août 2014 à 19:03:10

                        Dans ce cas là, la liste alphabet tout comme l'import de random et de os sont sous-entendus, je pensais qu'on pourrait s'en passer entre personnes ayant quelques connaissances en Python. De plus, le problème ne vient absolumment pas de là.

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          11 août 2014 à 19:06:41

                          Dans ce cas là, la liste alphabet tout comme l'import de random et de os sont sous-entendus, je pensais qu'on pourrait s'en passer entre personnes ayant quelques connaissances en Python.

                          Oui, mais en fait, je pense qu'on a tous autre chose à foutre que d'aller chercher ces import. Un ça passe, au bout du deuxième ça énerve lourdement et on se demande combien il y en a. Je te saurais gré d'avoir l'amabilité de bien vouloir rajouter les quelques lignes qui manquent pour pouvoir tester ton programme. C'est quand même incroyable qu'une personne demandant de l'aide envoie limite bouler quelqu'un qui veut juste s'assurer de la reproductibilité du problème.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            11 août 2014 à 19:21:36

                            Voilà l'intégralité du programme dans ce cas:

                            les données:

                            chance=8
                            
                            nom_fichier_scores="scores"
                            
                            alphabet=["Aubergiste",
                            "Bucheron",
                            "Culpabilite",
                            "Diagramme",
                            "Evaluation",
                            "Fromager",
                            "Grenadine",
                            "Hebdomadaire",
                            "Incarcerer",
                            "Justaucorps",
                            "Kimono",
                            "Leucocyte",
                            "Montgolfiere",
                            "Neophyte",
                            "Odalisque",
                            "Printanier",
                            "Quaternaire",
                            "Remaniement",
                            "Symphonie",
                            "Tambouriner",
                            "Urticaire",
                            "Velociraptor",
                            "Wallonne",
                            "Xylophage",
                            "Yachtwomen",
                            "Zygomatique"]

                            les fonctions:

                            # Import
                            import os
                            from pickle import *
                            from random import choice
                            from donnees_pendu import *
                            
                            
                            def recup_scores(): # Récupère les scores si le fichier existe. Dans tous les cas, on renvoie un dictionnaire, soit l'objet dépicklé, soit un dictionnaire vide
                            	if os.path.exists(nom_fichier_scores): # Le fichier existe
                            		# On le récupère
                            		fichier_scores=open(nom_fichier_scores, "rb")
                            		depickler=Unpickler(fichier_scores)
                            		scores=depickler.load()
                            		fichier_scores.close()
                            	else: # Le fichier n'existe pas
                            		scores={}
                            	return scores
                            	
                            def enregistrement_score(): # Enregistre les scores dans le fichier nom_fichier_scores. Reçoit en paramètre le dictionnaire des scores à enregistrer.
                            	fichier_scores=open(nom_fichier_scores, "wb") # On écrase les anciens scores
                            	pickler=Pickler(fichier_scores)
                            	pickler.dump(scores)
                            	fichier_scores.close()
                            	
                            def nom_utilisateur():
                            	nom_joueur=input("Entrez votre nom: ")
                            	return nom_joueur
                            	

                            et le jeu:

                            # Import
                            from donnees_pendu import *
                            from fonctions_pendu import *
                            from random import *
                            
                            scores=recup_scores() # Récupère les scores de la partie
                            joueur=nom_utilisateur()
                            
                            if joueur not in scores.keys():
                            	scores[joueur]=0
                            
                            
                            reponse="Oui"
                            while reponse.lower().capitalize()=="Oui": # Boucle principale, on continue le jeu tant qu'on le veut
                            	i=randrange(27) 
                            	mot=list(alphabet[i]) # Convertie le mot choisie en liste
                            	mot_ref=list(mot)
                            	
                            	j=1
                            	while j<len(mot): # Remplace les lettres par "*"
                            		del mot[j]
                            		mot.insert(j, "*")
                            		j+=1
                            	print("".join(mot))
                            	
                            	
                            	chance=8
                            	while chance>0 and mot!=mot_ref: # Boucle de mot, on continue à proposer une lettre tant qu'il nous reste des chances ou qu'on n'a pas trouvé
                            		tentative=input("Proposez une lettre: ")
                            		if len(tentative)>1 or not tentative.isalpha():
                            			print("Vous n'avez pas saisi une lettre valide")
                            			continue
                            		
                            		if tentative in mot:
                            			print("Vous avez déjà choisi cette lettre")
                            			continue
                            		
                            		for position, lettre in enumerate(mot_ref): # Regarde si la lettre proposée est dans le mot
                            			if tentative.lower()==lettre:
                            				del mot[position]
                            				mot.insert(position, tentative.lower())
                            		if tentative not in mot_ref:
                            			chance-=1
                            			if chance>1:
                            				print("Il vous reste {} chances".format(chance))
                            			elif chance==1:
                            				print("Il vous reste {} chance".format(chance))
                            		print("".join(mot))
                            		
                            		
                            	if mot==mot_ref: # Si le mot est trouvé
                            		print("Félicitation! Vous avez trouvez le mot!")
                            		
                            		
                            	elif chance==0: # Si le mot n'est pas trouvé
                            		print("Dommage! Vous n'avez pas trouvé le mot proposé...")
                            	
                            	scores[joueur]+=chance
                            		
                            		
                            	reponse=input("Voulez-vous continuer? (Oui/Non)") # Demande au joueur s'il veut continuer à jouer
                            	
                            if reponse.lower().capitalize()=="Non":
                            	if scores[joueur]>1:
                            		print("Vous finissez avec {} points.".format(scores[joueur]))
                            	else:
                            		print("Vous finissez avec {} point.".format(scores[joueur]))
                            	os.system("pause")

                            Il ne manque rien cette fois, j'epère que tu ne trouveras pas ça trop long.


                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              11 août 2014 à 19:34:14

                              Ben ton jeu fonctionne chez moi (à ceci près que lorsque l'on met une lettre en majuscule, on perd un essai mais la lettre est remplacée), mais en tout cas je n'ai strictement aucun soucis qui ressemble de près ou de loin à :

                              Comme je l'ai dit, quand je saisi une lettre il me dit "Vous n'avez pas saisi une lettre valide"(le message que je demande d'afficher si l'entrée est de plus de 2 caractères ou si ce n'est pas une lettre) et l'autre problème c'est qu'avant il ne me mettait pas les lettres dans le mot même si elles étaient bonnes.

                              Donc question, comment exécutes tu ton script ?

                              • Partager sur Facebook
                              • Partager sur Twitter
                                11 août 2014 à 19:49:20

                                Pour le problème de la majuscule, je l'ai réglé, merci de me l'avoir fait remarqué.

                                Je l'éxécute avec IDLE, il marche sans problème mais avec la console, en double-cliquant dessus, il n'y a rien a faire: la lettre que je saisi n'est pas valide selon lui. Je trouve ça assez bizarre. Je ne sais pas s'il y a une solution à ce problème assez singulier, mais bon... On va dire que mon programme marche c'est le principal, je vais m'en contenter bien que je ne sois pas satisfait pleinement. En tout cas merci pour l'aide.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  11 août 2014 à 19:55:29

                                  Je l'éxécute avec IDLE, il marche sans problème mais avec la console, en double-cliquant dessus, il n'y a rien a faire: la lettre que je saisi n'est pas valide selon lui.

                                  Hmmm, je serais tenté de dire que c'est probablement un bug d'IDLE. C'est-à-dire que tu as probablement une erreur chiante (du genre tab à la place d'espaces) ou je ne sais quoi qui traine, mais que IDLE corrige au moment de l'envoyer à l'interpréteur Python (c'est le genre de trucs qui m'a poussé à bannir définitivement IDLE ^^ ).

                                  Si tu copies colles les codes que tu as postés plus haut dans le bloc-note Windows par exemple dans de nouveaux fichiers et que tu exécutes ceux-ci sans passer par IDLE, est ce que tu rencontres le problème ?

                                  -
                                  Edité par Anonyme 11 août 2014 à 19:56:26

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    12 août 2014 à 18:32:10

                                    Oui, encore ce problème... Tant pis
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Programme ne fonctionnant pas sur console

                                    × 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