This repository has been archived on 2019-08-08. You can view files and clone it, but cannot push or open issues or pull requests.
s1-tp/S1/TP 4/choisis.py
2014-10-10 00:02:58 +02:00

102 lines
4.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PREUD'HOMME BONTOUX Geoffrey - PeiP 12 - 2014/2015
# TP n°4 donné le 3/10/2014 - Choisis un nombre
# http://www.fil.univ-lille1.fr/~wegrzyno/portail/Info/Doc/HTML/tp_iteration_conditionnelle.html
from random import randint
# [Q1] Que fait la fonction randint ?
# Utilisée sous la forme randint(a, b), a et b étant des entiers, elle retourne
# un entier pseudo-aléatoire entre a et b (différent à chaque éxecution)
# [Tests]
# >>> randint(0, 100)
# 39
# >>> randint(-500, 500)
# -161
# >>> randint(0, 1)
# 1
# [Q2] Créez une variable nommée mystere contenant un nombre entier
# tiré (pseudo-)aléatoirement entre 1 et 100.
mystere = randint(0, 100)
# [Q3] Que fait la fonction input ?
# Utilisée sous la forme input(a), elle affiche le texte a et autorise la
# saisie dans le terminal tout en bloquant l'execution du script. Après l'appui
# de la touche Entrée, la fonction se débloque et renvoie le texte de la saisie
# Quel est le type des valeurs renvoyées par cette fonction ?
# Le type renvoyé par input est une chaîne de caractrèes (<class 'str'>)
# [Q4] Écrivez une ou plusieurs instructions qui demandent à
# lutilisateur dentrer un nombre.
# print("[Q4]")
# reponse1 = input("En quelle année a été assassiné Louis XVI ? ")
# reponse2 = input("Quelles sont les 10 premières décimales de π ? ")
# reponse3 = input("J'ai dix billes que je partage équitablement entre trois \
# de mes camarades, combien me reste-t-il de bille(s) ? ")
# [Q5-7] (le code est majoritairement issu de la Q5, ce qui a été
# ajouté après est identifié comme telen commentaire)
def jeu():
"""
Lance un jeu de + ou -.
CU : nombre minimum inférieur au nombre maximum,
nombre d'essais supérieur à 0
"""
print("Jeu du + ou -")
continuer_jeu = True # Cette variable permet de savoir si il faut continuer
# à demander un nombre ou non.
# On demande au joueur les valeurs avec lesquels il veut jouer
minimum = int(input("Entrez le nombre minimum : ")) # Q7
maximum = int(input("Entrez le nombre maximum : ")) # Q7
assert(minimum < maximum), "Le nombre minimum doit être inférieur au \
nombre maximum" # Q7
maxEssais = int(input("Entrez le nombre d'essais : ")) # Q7
assert(maxEssais > 0), "Le nombre d'essais doit être supérieur à 0" # Q7
# minimum = 1 # Pré-Q7
# maximum = 100 # Pré-Q7
# maxEssais = 1 # Pré-Q7
essais = 0 # Comptabilise les essais réalisés
# J'utilise un autre nom de variable pour être conforme à la règle PEP 3104
mystere2 = randint(minimum, maximum) # On pioche le nombre mystère
# print("Nombre à trouver :", mystere2) # Décommenter pour tricher
while continuer_jeu:
proposition = int(input("Entrez un nombre entre "+str(minimum)+" et "+\
str(maximum)+" ("+str(maxEssais - essais)+" essais restants): "))
if proposition >= minimum and proposition <= maximum: # Si le nombre est
# en dehors de l'intervalle, on ne fait rien (pas même compter un essai)
# et on revient à l'affichage du essage
if proposition == mystere2:
print("C'est GAGNÉ")
continuer_jeu = False # On coupe la boucle
else: # Ce décalage permet, en cas de victoire, de ne pas afficher
# comme quoi le nombre d'essai est dépassé ni de compter un essai
# supplémentaire
essais += 1 # On comptabilise l'essai
if proposition < mystere2: # Si le nombre est inférieur
print("C'est PLUS")
elif proposition > mystere2: # Si le nombre est supérieur
print("C'est MOINS")
if essais >= maxEssais: # Q6
print("Vous avez dépassé le nombre d'essais autorisés") # Q6
continuer_jeu = False # Q6
score = int((7**2 * (maximum - minimum))/(maxEssais*99)-essais) # Q7
# J'utilise cette méthode de calcul de score car :
# - Elle donne les mêmes résultat que le jeu décrit dans le sujet pour un
# intervalle de [1,100] et un nombre d'essai de 7
# - Elle est est proportionelle à l'intervalle entre les bornes du choix
# - Elle est est inversement proportionelle au nombre d'essais donné
# - Elle me parait relativement équitable
# - Elle est tronquée pour la lisibilité
# score = 7 - essais # Pré-Q7
print("Vous avez marqué", score, "points.")