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.
Mais avec le except ça bug
c'est à dire?
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.
Donc random.choice(la ligne sans compter la 1). Dans la lign ça va séparer par ":", à savoir split(":").
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 ?
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.
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'
>>> ![]()
Il faut bien mettre le ficher Les_capitales.txt sur la source suivante :getcwd()
ça va afficher une destination, c'est bien là qu'il faut mettre le ficher .txt ?)
?
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.
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...
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.
![]()
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 ").lowerQue se passe-t-il ?
ça me dit de définir toutes mes variables mais elles sont rentrées par l'utilisateur ![]()
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() ![]()
Elle se trouve sous la deuxième while en fait, je sais pas pourquoi sur le post elle ne l'est pas
Je comprends pas, ça me remet que ça ne trouve pas le fichier, j'en peux plus ![]()
![]()


Ca me met que L n'est pas défini. nom n'est pas défini. t n'est pas défini ![]()
![]()
On est d'accord, il faut bien mettre le fichier Les_capitales dans l'endroit indiqué par os.getcwd() ?
Donc la dernière ligne doit être en dehors du While en effet, vu que dans tous les cas ça doit la balancer.
Je vois pas trop pourquoi ça devrait être vers la droite ![]()
tu parles du if, elif, else ![]()
Ils doivent être indépendants du reste, non ?
Faut les mettre sous quoi du coup ?
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 ![]()
Voilà :
D'accord, je vais tester ça. Merci.
Désolé pour la réponse en retard, j'avais pas internet ![]()