CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

python : jeu problème

Mustang-Shelby
Mustang-Shelby
Niveau 9
20 décembre 2015 à 02:05:52

Salut, j'ai un petit souci, j'ai un devoir dans deux jours en informatique et je prépare un jeu.
Mais avec le except ça bug...

En gros on a un fichier avec 50 capitales correspondant à 50 pays. L'yuilisateur entre un nombre n de questions voulu (50 maxi), et le jeu lui sort au hasard, n capitales. Si c'est bon, le nombre de bonnes réponses augmente. Si non ça ne compte pas. A la fin ça lui donne sa note et lui demande de rejouer ou non.

Voici le code :

def retry(): #question rejouer o/n
   recom=input("Tappons 'Oui' pour recommencer, ou 'Non' pour arrêter : ").lower()
   return recom=='oui' or 'o' or 'ok'

def questions(Les_capitales): #jeu
   try:
      quizz=open("Les_capitales.txt","r") 
   except IOError: 
      print("An error has occurred. Cannot find the file Les_capitales.txt . Please check your destination folder. ")
   else:
         quizz=open("Les_capitales.txt","r")
         cons=quizz.readline() ; quizz.close() ; brep=0 ; lc=quizz.readlines() ; n=len(lc) ; vrep=q.split(":")[1].strip("\n")
         nom=input("Bonjour ! Comment tu t'appelles ?")
         l=int(input("Combien de questions ?"))
         if l>50 :
            print("50 questions maximum !")
         print(cons)
         for k in range(l):
            print(random.choice(k.split(":")[0]))
            r=input().lower()
   except TypeError:
      print("C'est ça que t'appelles un mot, banane ?!")
   else:
      if r==vrep:
         print("Bonne réponse !")
         brep+=1
      else :
         print("Faux, banane ! La bonne réponse est",vrep)

   t=(brep/l)*100 #notation
   print("C'est terminé ! Vous avez un taux de réussite de", t, "%, soit ",brep," bonnes réponses sur",n,". Vous auriez eu une note de",floor((brep*20)/l),"/20.")
   if t>=67 : 
      print(". Très bien ",nom," ! Tu rent' chez toi.")
   elif t>=33 :
      print("Moerff ",nom,", bon en maths mais en géo...")
   else :
      print("Zéro toi-même ! ",nom,", revois le corrigé !")
               
while True: #ne pas rejouer
   questions()
   if not retry():
      break

Merci d'avance.

typedefstruct
typedefstruct
Niveau 7
20 décembre 2015 à 09:10:50

Mais avec le except ça bug

c'est à dire?

Mustang-Shelby
Mustang-Shelby
Niveau 9
20 décembre 2015 à 13:33:16

Bonjour, tout d'abord emrci de vos réponses.

Le except qui ne fonctionne pas est le TypeError.

Pour la boucle while retry, je ne sais pas comment faire le programme se relancer...

Pour le "corps" du programme, voilà ce que ça doit faire :
Prendre une ligne au hasard à partir de la 2e, séparer "Pays:capitale" par les ":", du coup on aura "Pay capitale", prendre le capitale et le comparer à celui que j'inscris.

Mustang-Shelby
Mustang-Shelby
Niveau 9
20 décembre 2015 à 13:35:53

Donc random.choice(la ligne sans compter la 1). Dans la lign ça va séparer par ":", à savoir split(":").

Message édité le 20 décembre 2015 à 13:39:23 par Mustang-Shelby
Mustang-Shelby
Mustang-Shelby
Niveau 9
20 décembre 2015 à 13:47:57

Voilà les petites améliorations que j'ia pu faire déjà :

import random

def retry(): #question rejouer o/n
   recom=input("Tappons 'Oui' pour recommencer, ou 'Non' pour arrêter : ").lower()
   return recom=='oui' or recom=='o' or recom=='ok'

def questions(Les_capitales): #jeu
   try:
      quizz=open("Les_capitales.txt","r") 
   except IOError: 
      print("An error has occurred. Cannot find the file Les_capitales.txt . Please check your destination folder. ")
   else:
         cons=quizz.readline() ; quizz.close() ; brep=0 ; lc=quizz.readlines() ; n=len(lc)
         nom=input("Bonjour ! Comment tu t'appelles ?")
         l=int(input("Tu marches tranquille dans la rue, t'as rien fait à personne... Eh puis on te dit : 'Combien de capitales à demander ?'. Tu réponds : "))
         while l>50 :
            print("50 questions maximum !")
         while l<=0:
            print("On attend un nombre strictement positif voyons !")
         print(cons)
   try :
         for k in range(l):
            vrep=k.split(":")[1].strip("\n")
            print(random.choice(k.split(":")))
            r=input().lower()
   except TypeError:
      print("C'est ça que t'appelles un mot, banane ?!")
   else:
      if r==vrep:
         print("Bonne réponse !")
         brep+=1
      else :
         print("Faux, banane ! La bonne réponse est",vrep)

   t=(brep/l)*100 #notation
   print("C'est terminé ! Vous avez un taux de réussite de", t, "%, soit ",brep," bonnes réponses sur",n,". Vous auriez eu une note de",floor((brep*20)/l),"/20.")
   if t>=67 : 
      print(". Très bien ",nom," ! Tu rent' chez toi.")
   elif t>=33 :
      print("Moerff ",nom,", bon en maths mais en géo...")
   else :
      print("Zéro toi-même ! ",nom,", revois le corrigé !")
               
while True: #ne pas rejouer
   questions()
   if not retry():
      break

Je comprends pas bien un truc... C'est possible de mettre plusieurs fois try ? Autant de fois qu'il y a d'except ?
Et le else fait continuer le programme on est d'accord ?

Mustang-Shelby
Mustang-Shelby
Niveau 9
20 décembre 2015 à 20:20:36

Merci de ton aide immense VDD ! :-)

Maintenant que j'ai compris ça, il me faut à tout prix traiter les except, ça fera partie de mon DS !

Merci encore.

Mustang-Shelby
Mustang-Shelby
Niveau 9
20 décembre 2015 à 20:42:59

Autre souci... Ca m'affiche ça :

Python 3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> 
 RESTART: C:/Users/Riguel/AppData/Local/Programs/Python/Python35/Der des ders.txt 
Traceback (most recent call last):
  File "C:/Users/Riguel/AppData/Local/Programs/Python/Python35/Der des ders.txt", line 44, in <module>
    questions()
TypeError: questions() missing 1 required positional argument: 'Les_capitales'
>>> 

:question:

Il faut bien mettre le ficher Les_capitales.txt sur la source suivante :
getcwd() :d) ça va afficher une destination, c'est bien là qu'il faut mettre le ficher .txt ?)

?

Grimmys
Grimmys
Niveau 19
20 décembre 2015 à 21:26:41

Salut,

En fait, tu as mis un paramètre dans la définition de ta fonction ( entre les parenthèses ).

Du coup ben pour lui, il y en a besoin afin de lancer la fonction. :)

La solution consiste donc à supprimer le paramètre que tu as inséré dans la définition de ta fonction.

Mustang-Shelby
Mustang-Shelby
Niveau 9
21 décembre 2015 à 00:00:14

Le souci c'est que je suis obligé de mettre le fichier en variable vu que le quizz va chercher les pays et leurs capitales...

Grymmis
Grymmis
Niveau 19
21 décembre 2015 à 13:23:39

Hein ?

Peut-être que tu as fait des modifs depuis, mais voici le code que je lis pour la première ligne de ta fonction :


def questions(Les_capitales): #jeu

Ainsi, ta fonction demande qu'on lui fournisse un argument, qui serra rangée dans la variable Les_capitales.
Sauf que cette variable, tu ne t'en sers à aucun moment ( car finalement tu ouvres après le fichier Les_Capitales.txt et tu le ranges dans la variable quizz ), et que, lorsque tu exécutes ta fonction, tu ne l'as fournis pas ( ce qui provoque ainsi l'erreur, rien qu'en lisant le traceback tu aurais normalement pu saisir : " questions() missing 1 required positional argument: 'Les_capitales' ", on ne peut pas faire plus explicite pour décrire le problème :) ).

Je te laisse résoudre le problème.

Message édité le 21 décembre 2015 à 13:24:15 par Grymmis
Mustang-Shelby
Mustang-Shelby
Niveau 9
23 décembre 2015 à 13:39:20

:hum:

import random
rec="oui"
while rec=="oui" or rec=="o" or rec=="ok" :
   try:
      quizz=open("Les_capitales.txt","r")
   except IOError: 
      print("An error has occurred. Cannot find the file Les_capitales.txt . Please check your destination folder. ")
   else:
      cons=quizz.readline()
      quizz.close()
      lc=quizz.readlines()
      n=len(lc)
      nom=input("Bonjour ! Quel est votre nom ?")
      L=int(input("Combien de questions à poser ? : "))
      while L > 50 or L <= 0:
        if L>50:
           print("50 questions maximum !")
        else:
           print("On attend un nombre strictement positif voyons !")        
           L = int(input("Réessayez : "))
        print(cons)
        for k in range(L):
            ligne = random.choice(lc[1:])
            couplereponse = ligne.split(':')
            vrep = couplereponse[1].strip('\n')
            r = input("Quelle est la capitale de ce pays ? {}".format(couplereponse[0]))
    
            if r.lower() == reponse.lower():
               print("Bonne réponse !")
               b+=1
            else :
               print("Faux ! La bonne réponse est", vrep)

   t=(b/L)*100 #notation
   print("C'est terminé ! Le taux de réussite de", t, "%, soit ", b, " bonne(s) réponse(s) sur", n, ". Vous auriez eu une note de", (b*20)/L, "/20.")
   if t>=67 : 
      print(". Très bien ",nom," ! ")
   elif t>=33 :
      print("Boff",nom,", ...")
   else :
      print("Zéro vous-même ! ",nom,", revoyez le corrigé !")
   rec=input("Souhaitez-vous recommencer ? o/n ").lower

Que se passe-t-il ? :-( ça me dit de définir toutes mes variables mais elles sont rentrées par l'utilisateur :(

Mustang-Shelby
Mustang-Shelby
Niveau 9
23 décembre 2015 à 13:40:35

Et quand j'initialise avec des 1 et 0, ça ne lance même pas le jeu, ça me dit que j'ai 0 réponses bonnes etc... :(
Et ça me dit de base que ça ne toruve pas le fichier, alors que je l'ai mis dans le répertoire en faisaiot os.getcwd() :-(

Mustang-Shelby
Mustang-Shelby
Niveau 9
23 décembre 2015 à 18:56:31

Elle se trouve sous la deuxième while en fait, je sais pas pourquoi sur le post elle ne l'est pas [[sticker:p/1jnh]]

Mustang-Shelby
Mustang-Shelby
Niveau 9
23 décembre 2015 à 18:58:00

Je comprends pas, ça me remet que ça ne trouve pas le fichier, j'en peux plus :pf:

Mustang-Shelby
Mustang-Shelby
Niveau 9
23 décembre 2015 à 19:03:55

:snif2:

https://image.noelshack.com/fichiers/2015/52/1450893809-capture.jpg

https://image.noelshack.com/fichiers/2015/52/1450893809-capture-2.jpg

Ca me met que L n'est pas défini. nom n'est pas défini. t n'est pas défini :pf:

:honte:

Message édité le 23 décembre 2015 à 19:05:53 par Mustang-Shelby
Mustang-Shelby
Mustang-Shelby
Niveau 9
23 décembre 2015 à 19:11:21

On est d'accord, il faut bien mettre le fichier Les_capitales dans l'endroit indiqué par os.getcwd() ?[[sticker:p/1jnh]]

Donc la dernière ligne doit être en dehors du While en effet, vu que dans tous les cas ça doit la balancer.

Message édité le 23 décembre 2015 à 19:13:52 par Mustang-Shelby
Mustang-Shelby
Mustang-Shelby
Niveau 9
23 décembre 2015 à 19:21:32

Je vois pas trop pourquoi ça devrait être vers la droite :(
tu parles du if, elif, else :question:
Ils doivent être indépendants du reste, non ? :(

Faut les mettre sous quoi du coup ?

Mustang-Shelby
Mustang-Shelby
Niveau 9
23 décembre 2015 à 19:27:37

Lorsque je déplace vers la droite ça fait un programme infini qui me dit que ça n'a pas trouvé lke fichier. Pourtant je l'ai mis dans le dossier de Pyhton , avec lequel j'ai mis le programme :(

Mustang-Shelby
Mustang-Shelby
Niveau 9
23 décembre 2015 à 19:35:07

Voilà :
https://image.noelshack.com/fichiers/2015/52/1450895688-capture-3.jpg

Mustang-Shelby
Mustang-Shelby
Niveau 9
23 décembre 2015 à 22:40:04

D'accord, je vais tester ça. Merci.

Désolé pour la réponse en retard, j'avais pas internet :hap:

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment