JEU DU PENDU

Signaler
Messages postés
5
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
7 mars 2009
-
Messages postés
158
Date d'inscription
samedi 31 janvier 2004
Statut
Membre
Dernière intervention
12 mars 2009
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/49438-jeu-du-pendu

Messages postés
158
Date d'inscription
samedi 31 janvier 2004
Statut
Membre
Dernière intervention
12 mars 2009

on est tout a fait sur le meme bord et je pense a 100%. si j'ai parle de POO c'est parceque beaucoup de gens pensent justement et a tord que Classes = etre competent. pourquoi je fais ce commentaire sur cette source? parque l'auteur ecrit je cite: "Ca reste de la programmation linéaire, je n'ai programmé aucune classe." peut être que je comprend mal mais j'ai l'impression que ce message veut dire que quand il sera plus avance il y ajoutera des classes. Bon d'un point de vu pédagogique çà peut être utile de mettre des classes dans des exemples simple mais pour ma part et c'est mon point de vu: les classes ont été créées pour faciliter la vie au programmeur.exemple on peut bien écrire des classes en C mais faut reconnaitre que c'est fastidieux et sources de beugs. Moi personnellement j'en abuse que rarement et je trouve que etre compétent c'est écrire un programme qui plante le point possible avec un code claire (sans blocs sinueux ou ténébreux) et sans étalage de connaissance inutile. sur ceux cette source est bien surtout pour moi qui début python et qui vient de langage comme C. et a part vouloir montrer a d'autres débutants (comme moi) comment on utilise des classes en python je suggère a son auteur de ne pas se prendre la tête a ajouter des classes ou tout autre superflu a son programme.
Messages postés
382
Date d'inscription
mercredi 23 août 2006
Statut
Membre
Dernière intervention
8 novembre 2010
16
En réalité un programme linéaire est un problème dans lequel intervient des équations linéaires (donc non différentiel : sans dérivé ou intégration) et des contrainte sur les variables. En gros, tous programmes ne contenant pas de classes, d'objets et une simple équation mathématiques (une suite de test) - en fait ça ne concerne que la partie algorithme, les entrées de donnée (raw_input ou input en Python) et même d'une certaine façon les vérifications des données sont difficile à classé du fait que l'on attend l'entrée de l'utilisateur ...

Mais au lieu de s'embêter avec des définitions, je préfère parlé du programme en lui même. Utilisé des objets n'est pas une preuve de compétence ! Ici dans ce programme ça n'a aucun intérêt, le programme n'a pas de réel but en soit si ce n'est divertir de manière simple l'utilisateur ! On pourrait imaginer une classe Jeu qui géré les points du joueur, en vu d'en amélioré la "porté" et pourquoi pas ensuite tenté la gestion du jeu en réseau.

Le fait que le noyau linux soit sans objets m'étonne, mais cela dit, tous langage de haut niveau tel que Python ne peut fonctionner directement avec un micro-processeur, il faut d'abord le compiler en un langage plus simple généralement l'assembleur qui n'a pas de classes ! Une classe peut être convertit (de manière compliquer certes) en un programme classique.

En résumer, utiliser les classes la où ça n'apporte aucun intérêt est tous simplement idiot, ici la source ne demande pas cela (à voir pour de possible améliorations dans le future) !
Messages postés
158
Date d'inscription
samedi 31 janvier 2004
Statut
Membre
Dernière intervention
12 mars 2009

le defaut de ton programme c'est vraiment le manque de commentaires.
et je crois sans etre trop sur que tu n'as pas fait de programmation lineaire. je crois que la programmation lineaire c'est quand t'as un main et c'est tout. l'utilisation des fonctions suffit, et je comprend pas pourquoi les gens pensent que programmer sans classes c'est mal, ou que c'est debutant. je rappelle que le noyau linux est programmer sans classes. donc il n'a rien de debutant a faire de la programmation sans classes mais avec des fonctions.
Messages postés
382
Date d'inscription
mercredi 23 août 2006
Statut
Membre
Dernière intervention
8 novembre 2010
16
Il y a une erreur : lorsque l'on trouve le mot en dernière chance, i = 12. Le résultat affiche "bravo" et ensuite le test suivant trouve que 13-1 = 12 = i et il en déduit à tore que j'ai perdu !
De plus il n'y a pas de vérification réel de l'entrée de l'utilisateur : C'est une bonne chose d'avoir vérifié que l'utilisateur utilise 1, 2 ou 3 dans le menu, mais si je rentre une lettre, ton programme bug quand il faut le transformer en entier autant utilisé input plutôt que raw_input !
De même si j'utilise des majuscules dans les propositions, il ne reconnait pas les caractères.
Voici ce qui aurait été souhaitable :

# -*- coding: cp1252 -*-

import random

def cache(mot,lettre):
"Cacher les lettres inconnues avec nb lettres > 2 "
nb = len(mot)
resultat = ""
for i in range(nb): if i 0 or i nb-1 or mot[i] in lettre:
resultat += mot[i]
else:
resultat += "*"
return resultat

def liste_element(liste,espace=1):
"Créé une liste de carractères des lélément d'une suite"
if len(liste) == 0:
t = "Aucune\n"
else:
t = ""
for i in liste:
t += i + "\n"
if espace: # On passe une ligne ?
return t
else:
return t[:len(t)-1]

def detreminer_mot():
"Renvoie un mot au hazard"
liste = ["fromage","alambique","casserole","programme","television","logiciel","avion","gourmandise"\
,"telechargement","illegalite","instrument","tondeuse","ordinateur","programmation","technologie",\
"diffusion","estampage","navigation","hasardeux","fondations","artistique","utilisation","imbuvable",\
"legume","innovation","constitution","iconique","evidence","invitation","cavite","lampadaire","limonade"\
,"bouteille","concours","culture","psychologie","cardiologue","pharmaceutique","laboratoire","scolaire"\
,"rasoir","medicament","perfusion","pansement","forage","aiguille","costume","danser","contemporain"\
,"mondialisation","environnement","ombrelle","vetement","sentiment","congelateur","spatule","chandelier"\
,"bateau","commandant","paquerette","coquelicot","robinetterie","armoiries","boutique","fantome","plaisanterie"\
,"ironique","electricite","ingenieur","infirmiere","informatique","biologie","citoyennete","chaussette","confiseries"\
,"glacier","bistrot","opticien","elegant","aquatique","piscine","romantique","antiquite","automobile","italienne"]
return liste[random.randint(0,len(liste)-1)]

def lettre_in_mot(mot,lettre):
"Vérifie que tous les carractère d'un mot soit dans une liste"
err = 0
for i in mot:
if i in lettre:
err = 0
else:
err = 1
break
return not(err)

def question(question,rep_possible=[],lettre=[],err="Cette réponse n'était pas attendu"):
"Pose une question à l'utilsateur et vérifie sa réponse"
while 1:
a = raw_input(question + "\n>> ") if (a in rep_possible or rep_possible []) and (lettre_in_mot(a,lettre) or lettre []):
return a
else:
print "\nErreur : " + err + '\n'

def jeu():
"Lance le jeu"
nb_essai = 13
lettre_use = []
mot_use = []
gagne = 0
l=[] # Liste de toute les lettres de l'alphabet sans accent
for i in range(65,91):
l.append(chr(i))
for i in range(97,123):
l.append(chr(i))

print "Début de la séance de jeu"
mot = detreminer_mot()
print "Un mot à été déterminer au hazard\n"

while nb_essai > 0:
print cache(mot,lettre_use) + " (" + str(len(mot)) + " lettres)"
q = "Faites une proposition (" + str(nb_essai) + " essais)"
r = question(q,lettre=l,err="Seules les lettres sans accent sont autorisées")

if len(r)==1 and not(r.lower() in lettre_use):
lettre_use.append(r.lower())
if r.lower() in mot:
print "Lettre trouvée\n"
else:
print "Cette lettre n'appartient pas au mot recherché \n"
nb_essai = nb_essai - 1

elif len(r)==1 and r in lettre_use:
print "Vous avez déja utilisé cette lettre !\nRappel : Lettres déja utilisées :"
print liste_element(lettre_use,0)
print "Rappel : Mots déja proposés :"
print liste_element(mot_use)

elif len(r)>1 and not(r.lower() in mot_use) and r.lower()<>mot:
mot_use.append(r.lower())
print "Ce mot n'est pas le mot recherché\n"
nb_essai = nb_essai - 1

elif len(r)>1 and r.lower()==mot:
gagne = 1
break

elif len(r)>1 and r.lower() in mot_use:
print "Vous avez déja utilisé ce mot !\nRappel : Lettres déja utilisées :"
print liste_element(lettre_use,0)
print "Rappel : Mots déja proposés :"
print liste_element(mot_use)

if gagne:
print "Bravo, vous avez trouvé le bon mot"
else:
print "Domage, vous n'avez pas trouvé le mot qui été : " + mot

print "\n\n Fin de la séance de jeu \n\n\n"
menu()

def menu():
"Menu du jeu"
texte = """\t\t-- LE PENDU --
1. Jouer
2. Instructions
3. Quitter"""

saisie = question(texte,rep_possible=["1","2","3"],err="Les réponses attendu sont 1, 2 ou 3")

if saisie == "1":
print "\n\n"
jeu()
elif saisie == "2":
print """\n\t\t-- Règles du jeu --
Des mots sont tirés au sort parmi une base de donnée. Seule la première et dernière lettre\
sont affichées, les autres lettres étant remplacées par des étoiles. Le but du jeu est d'essayer de\
retrouver le mot. Vous pouvez saisir vos réponses lettres par lettre ou avec l'intégralité du mot.
Les majuscules et les caractères spéciaux (accents,...) sont volontairement omis pour plus de facilité.\n"""
menu()
else:
print "\nAu revoir"

menu()

Je met 6/20 tout de même, vois si tu peux améliorer
Afficher les 6 commentaires