102 lines
4.4 KiB
Python
102 lines
4.4 KiB
Python
# 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 à
|
||
# l’utilisateur d’entrer 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.")
|