[Python] Aide pour un programme de débutant

Aide pour un programme de débutant [Python] - Python - Programmation

Marsh Posté le 09-10-2011 à 22:57:59    

Bonjour à tous,
 
Je suis étudiant en 1ère année en informatique et je dois rendre un projet de programmation (Python)
Je suis bloqué sur ce projet, s'il y a des gens qui pourrait programmer ce projet, ce serait vraiment merveilleux. Apparemment il n'est pas long à faire (pour les connaisseurs)
 
Consignes du projet :  
 
Le match de Tennis
 
À l’occasion du championnat de tennis interuniversitaire, les Autorités de l'université ont demandé
au Département d’Informatique de leur fournir une application qui peut être utilisée par
l’arbitre pendant un match afin de compter les points.
 
Un match de tennis se gagne en remportant un maximum de points, de jeux, puis de sets.
Le tournoi n’organise que des matchs où il suffit de gagner un set pour remporter la partie. Pour
gagner un set, il faut être le premier à marquer six jeux avec au moins deux jeux d’écart ; dans le
cas contraire, le set se poursuit. Des scores possibles pour remporter un set sont donc, entre autres :
6-0, 6-1, 6-2, 6-3, 6-4 et 7-5. Un set se remporte donc en gagnant un certain nombre de jeux. Afin
de remporter un jeu, il est nécessaire de marquer au moins quatre points. Lors d’un jeu, voici la
manière dont les points sont comptés :
 
- zéro : pour aucun point marqué dans le jeu ;
- quinze : pour un point marqué ;
- trente : pour deux points marqués ;
- quarante : pour trois points marqués.
 
Lorsque les deux joueurs ont marqué trois points au sein d’un même jeu (donc à 40-40), il y a
égalité. Celui qui marque le point suivant obtient un « avantage ». Pour remporter le jeu, un joueur
qui a l’avantage doit marquer un autre point. Si c’est le joueur qui n’a pas l’avantage qui marque
le point suivant, on revient à l’égalité 40-40, et ainsi de suite jusqu’à ce que l’un des deux joueurs
remporte le jeu.
 
Nous vous demandons de créer un fichier projet1.py qui devra comprendre les éléments
suivants :
 
1. Une fonction augmenter(points) qui prend en paramètre le nombre de points d’un joueur
(0, 15, 30 ou 40) et qui renvoie le nombre de points qu’aurait ce joueur en marquant un
point. Si le joueur obtient un « avantage », la fonction devra renvoyer la chaîne de caractères
’A’.
2. Une fonction jouer_jeu() sans paramètre qui simule un jeu de tennis et qui renvoie un entier
1 ou 2 respectivement dans le cas où le joueur 1 ou 2 a gagné le jeu. Cette fonction devra
utiliser la fonction augmenter() précédente. Elle devra donc aussi demander à l’utilisateur
quel joueur vient de marquer le dernier point, ce jusqu’à ce que le jeu soit terminé.
3. Une fonction fin_match(jeux1,jeux2) à deux paramètres (respectivement le nombre de
jeux marqués par le joueur 1 et le joueur 2) qui renvoie True si le match est terminé, False
sinon.
4. Un morceau de code principal qui, à l’aide des fonctions jouer_jeu() et fin_match()
simule un match de tennis à un set tel qu’expliqué précédemment et qui affiche quel joueur
remporte la partie.
 
 
Votre projet doit pouvoir s’exécuter dans un terminal en tapant « python projet1.py ». Un
exemple d’exécution de votre projet serait ainsi le suivant :
 
Score du jeu courant: 0 - 0
Qui a marqué ? 1
Score du jeu courant: 15 - 0
Qui a marqué ? 2
Score du jeu courant: 15 - 15
Qui a marqué ? 1
Score du jeu courant: 30 - 15
Qui a marqué ? 1
Score du jeu courant: 40 - 15
Qui a marqué ? 1
JOUEUR 1 GAGNE LE JEU
Score du set courant: 1 - 0
Score du jeu courant: 0 - 0
Qui a marqué ? 2
...
Qui a marqué ? 1
Score du jeu courant: 40 - 30
Qui a marqué ? 2
Score du jeu courant: 40 - 40
Qui a marqué ? 1
Score du jeu courant: A - 40
Qui a marqué ? 2
Score du jeu courant: 40 - 40
Qui a marqué ? 1
Score du jeu courant: A - 40
Qui a marqué ? 1
JOUEUR 1 GAGNE LE JEU
Score du set courant: 6 - 4
JOUEUR 1 GAGNE LE MATCH
 
 
 
D'avance merci pour votre aide..

Reply

Marsh Posté le 09-10-2011 à 22:57:59   

Reply

Marsh Posté le 13-10-2011 à 17:14:02    

Tu veux qu'on te fasse l'exo... tu veux aussi 100 balles et un mars  :o  
 
Tu as de la chance, je suis aussi débutant et des exos pour m'exercer, ça m'intéresse. J'ai donc pris 3 grosses heures pour le faire (oui, c'est très long et j'hésite à me pendre pour stupidité  :D , mais ça faisait mini un mois que je n'avais pas regardé un bout de python...)
Je n'ai pas rencontré de grosses difficultés, juste des trucs nazes, style == à la place de =, ce genre de truc.
Le contrôle de la saisie utilisateur m'a fait chercher un moment dans mes exos et docs, pour finalement être solutionné par google (try: except ValueError:)
Les conditions de victoire et d'avantage m'ont fait écrire des if, elif, and, or pas très élégants.
Je comptais faire un tuple pour les points affichés et gérer les points dans le code avec son index, mais ton exposé impose que augmenter(points) prenne en paramètre (0, 15, 30, 40)
La fonction la plus "chiante" est jouer_jeu()
 
Alors, je ne vais pas te mettre le code mais te laisser chercher et me dire où tu bloques. Poste ce que tu as fais, je posterai après.


---------------
Des piafs en photo
Reply

Marsh Posté le 25-04-2012 à 11:49:24    

bonjour,  
 
j'ai le même sujet, et j'ai du mal à organiser la facon de penser. est ce que tu pourrais me dire quel a été ton découpage du programme en modules stp?  
 
tu vois je réfléchis! :)

Reply

Marsh Posté le 27-04-2012 à 17:45:43    

Salut,
 
Ça faisait un moment que je n'étais pas venu voir dans la cat python et il y a un post ! et en plus j'ai retrouvé l'exo !!
 
J'avais fait trois fonctions : augmenter(point) ; jouer_jeu() ; et fin_match(jeu1, jeu2).
Après, je ne me souvient plus du truc et ça doit sûrement pouvoir se faire mieux autrement.


---------------
Des piafs en photo
Reply

Marsh Posté le 30-03-2014 à 17:58:07    

dsl de te repondre avec toutes ses années de retard mais tient voila ce que j'ai fait en ISN:
def jeu (score):
 while score.count(1)>score.count(2):
  break
  print (score.count(1) , score.count(2))
  print ('vainqueur joueur 1')
 while score.count(2)>score.count(1):
  break
  (score.count(1) , score.count(2))
  print ('vainqueur joueur 2')
 if score.count(1)==score.count(2):
  print (score.count(1) , score.count(2))
  print('jeu en cours')
 elif score.count(1)-score.count(2)==1:
  print (score.count(1) , score.count(2))
  print ('jeu en cours')
 elif score.count(2)-score.count(1)==1:
  print (score.count(1) , score.count(2))
  print ('jeu en cours')
 elif score.count(1)<4 and score.count(2)<4:
  print (score.count(1) , score.count(2))
  print ('jeu en cours')
 elif score.count(1)==4:
  print(4, 0)
  print('vainqueur joueur 1')
 elif score.count(2)==4:
  print(0, 4)
  print('vainqueur joueur 2')
 elif score.count(1)-score.count(2)==2:
  print (score.count(1), score.count(2))
  print ('vainqueur joueur 1')
 elif score.count(2)-score.count(1)==2:
  print (score.count(1), score.count(2))
  print ('vainqueur joueur 2')
 else:
  print('erreur de score')
ou:
def tennis ():
 print'les joueurs sont 1 et 2'
 score=[0,15, 30, 40,'Jeu']
 ex=[40, 'Adv','Jeu']
 score1=score[0]
 score2=score[0]
 j1=0
 j2=0
 while score1!='Jeu' and score2!='Jeu': #boucle qui tourne tant que personne n'atteint le jeu
  vainqueur=input('Qui a marqué ? : ')
  if score1==40 and score2==40:
   if vainqueur=='1':
    score1='Adv'
   else:
    score2='Adv'
  elif score1==40 and score2=='Adv':
   if vainqueur=='2':
    score1=40
    score2='Jeu'
   elif vainqueur=='1':
    score1=40
    score2=40
  elif score1=='Adv' and score2==40:
   if vainqueur=='1':
    score1='Jeu'
    score2=40
   elif vainqueur=='2':
    score1=40
    score2=40
  elif vainqueur=='1':#on s'intéresse au cas ou le joueur1 gagne le point
   j1=j1+1
   score1=score[j1]
  else:
   j2=j2+1
   score2=score[j2]
  print(score1, score2)

Reply

Marsh Posté le 30-03-2014 à 19:50:35    

Finalement, ne rien déterrer aurait été préférable, car tu ne présentes strictement rien en ce qui concerne l'objet score...
 
Du coup sans cet objet le code est inutile et incompréhensible. Qui puis est c'est illisible, avec ou sans balises code !
 
Bref, pour un élève ISN, c'est décevant, car on pourrait penser qu'à ce niveau vous avez tout de même appris suffisamment pour comprendre le minimum syndical dans l'apprentissage d'un langage de programmation.
 
Je suis dur, désolé, mais bien réaliste, malheureusement.
 
Qui puis-est le cahier des charges, est totalement en contradiction avec cette dernière solution, ce qui rend la réponse HS!!!


Message édité par fred1599 le 30-03-2014 à 19:52:39
Reply

Marsh Posté le 03-04-2014 à 18:10:11    

Cependant le programme fonctionne je ne comprend pas la reproche...

Reply

Marsh Posté le 03-04-2014 à 18:43:13    

score est une liste, j'ai lu assez rapidement, croyant que tu avais des notions de POO...
 
Mea culpa, cependant tu crées une fonction pour faire tout le boulot, en gros une fonction, une tâche, c'est un peu le but de la modularité en programmation informatique...
 
Ton code est répétitif, exemple
 

Code :
  1. print (score.count(1) , score.count(2))


 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed