Advertisement
Guest User

PENDU

a guest
Aug 24th, 2015
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.71 KB | None | 0 0
  1. from random import choice
  2. import sys
  3. from string import ascii_lowercase as alphabet
  4.  
  5. LISTWORDS = ('bat baboon badger abbreviate abolish businessman change\
  6.             directions discount ever everyday floor fluor glass')
  7.  
  8. ERRORS = {
  9.             'integer': 'argument must be an integer',
  10.             'value': 'greater than or equal to 0',
  11.             'absence': 'absence of a letter',
  12.             'letter': 'not in alphabet [a-z]',
  13.             'propos': 'letter already proposed'
  14.          }
  15.  
  16. HANGMANPICS = ['''
  17.  
  18.  +---+
  19.  |   |
  20.      |
  21.      |
  22.      |
  23.      |
  24. =========''', '''
  25.  
  26.  +---+
  27.  |   |
  28.  O   |
  29.      |
  30.      |
  31.      |
  32. =========''', '''
  33.  
  34.  +---+
  35.  |   |
  36.  O   |
  37.  |   |
  38.      |
  39.      |
  40. =========''', '''
  41.  
  42.  +---+
  43.  |   |
  44.  O   |
  45. /|   |
  46.      |
  47.      |
  48. =========''', '''
  49.  
  50.  +---+
  51.  |   |
  52.  O   |
  53. /|\ |
  54.      |
  55.      |
  56. =========''', '''
  57.  
  58.  +---+
  59.  |   |
  60.  O   |
  61. /|\ |
  62. /    |
  63.      |
  64. =========''', '''
  65.  
  66.  +---+
  67.  |   |
  68.  O   |
  69. /|\ |
  70. / \ |
  71.      |
  72. =========''']
  73.  
  74. def check(value):
  75.     '''Analyse l'argument de la ligne de commande'''
  76.     if not value.isdigit() or int(value) <= 0:
  77.         print(ERRORS['integer'])
  78.         print(ERRORS['value'])
  79.         sys.exit()
  80.  
  81. def askLetter():
  82.     '''Demande une lettre en contrôlant celle-ci'''
  83.     letter = input('Entrer une lettre: ')
  84.    
  85.     if letter in propositions:
  86.         print(ERRORS['propos'])
  87.        
  88.     elif letter not in alphabet:
  89.         print(ERRORS['letter'])
  90.        
  91.     else:
  92.         letter = letter[0] # pour s'assurer de prendre une seule lettre
  93.         propositions.append(letter)
  94.         return letter
  95.        
  96.     askLetter()
  97.  
  98. def play(n):
  99.     '''Le jeu complet'''
  100.     secret = choice(LISTWORDS.split()) # choix d'un mot dans la liste
  101.     word = ['_'] * len(secret) # construction du mot inconnu
  102.     counter = 0
  103.    
  104.     while secret != word and counter <= n:
  105.        
  106.         letter = askLetter()
  107.        
  108.         if letter not in secret: # Si la lettre ne fait pas parti du mot secret
  109.             print(HANGMANPICS[counter])
  110.             print(ERRORS['absence'])
  111.             counter += 1 # on compte une erreur, un coup
  112.            
  113.         else:
  114.             for index, char in enumerate(secret):
  115.                 if char == letter:
  116.                     word[index] = char # on place la/les lettre(s) dans le mot inconnu
  117.                    
  118.         print('Mes propositions: {}'.format(''.join(propositions)))
  119.         print(' '.join(word)) # Affichage propre du mot inconnu
  120.  
  121. def main(arg):
  122.     '''Ligne de commande et gestion du replay'''
  123.     MAX_MOVE = sys.argv[1] # récupération du nombre de coups maximum
  124.     check(MAX_MOVE) # on vérifie que l'on peut continuer le programme
  125.     replay = True
  126.    
  127.     while replay:
  128.         propositions[:] = [] # Ne pas oublier de réinitialiser propositions quand on rejoue
  129.         play(int(MAX_MOVE)) # On joue pour MAX_MOVE coups
  130.         replay = False if input('Voulez-vous rejouer (o/n): ') == 'n' \
  131.                 else True
  132.  
  133. propositions = []
  134. main(sys.argv)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement