Bonsoir a tous, je dois rendre un dm dans 2 jours sur le logiciel python mais j'ai quelques difficultés voici mon énoncé : On demande à l'utilisateur de deviner en moins de six essais un nombre tiré au hasard entre 10 et 100. On lui indique à chaque fois si le nombre proposé est superieur ou inférieur au nombre cherché.
1) a) Que représente les variables E,S,N
b) Ecrire et tester un programme traduisant cet algorithme.
2)Sans stratégie, il est difficile de gagner.
En effet, selon le choix des valeurs, il sera
ou non possible de déterminer à coup sûr la
solution.
La méthode consiste, en choisissant à
chaque fois la valeur située au milieu de
l'intervalle en cours, à réduire de moitié
l'amplitude de l'intervalle dans lequel se
trouve le nombre.
Tester cette stratégie pour gagner à tous les
coups à ce jeu et détailler un coup gagnant.
Affecter à S la valeur d'un nombre
aléatoire entier compris entre 10 et 100
Affecter à E la valeur 1
Tant que E<7
Saisir N
Si N>S
Alors afficher "C'est moins"
Sinon
Si N<S
Alors afficher "C'est plus"
Sinon
Afficher "C'est gagné"
Sortir de la boucle
Fin Si
Fin Si
Affecter à E la valeur E+1
Fin Tant que
Si E=7
Alors afficher "C'est perdu"
Fin Si
Voici mon algorithme en langage naturel
J'ai testé sur python cet algorithme et j'ai obtenue :
from random import*
S= randint (10,100)
E = 1
while E < 7 :
N = int(input("saisir une valeur comprise entre 10 et 100:"))
if N > S:
print("C'est moins")
elif N < S:
print("C'est plus")
else:
print("C'est gagné")
break
E= E+1
if E==7:
print("C'est gagné")
Mon seul problème c'est que mon ''elif'' m'indique qu'il y a une erreur de syntaxe du coup je ne peux pas exécuter mon programme.
Pour terminer je n'ai pas compris le sens de la question 2.
Si quelqu'un peut m'éclaircir sur ces 2 points s'il vous plait merci infiniment
Bonjour,
Pas d' erreur de syntaxe chez moi, en recopiant ton code...
Tu n' as pas une erreur d' indentation?
bonsoir
je pense aussi que c'est l'indentation
en revanche, à la fin, je mettrais
if E==7:
print("C'est perdu")
oui, si après 6 essais (E>7) tu te trouves à cet endroit du programme, c'est que tu n'as pas trouvé S, donc "perdu"
tu as rectifié tes indentations? tu as compris ?
salut
pour te donner une idée ..fais sous excel
Sub jeu()
Dim t As Variant
Randomize
ReDim t(0 To 90)
For i = 0 To UBound(t)
t(i) = i + 10
Next
p = Int(Rnd * 91)
MsgBox p
N = InputBox("saisir une valeur entière")
While Val(N) <> p
If Val(N) > p Then
MsgBox "doit etre plus petit"
End If
If Val(N) < p Then
MsgBox "doit etre plus grand"
End If
j = j + 1
N = ""
N = InputBox("saisir une valeur entière")
If j = 6 Then
MsgBox "6 essais on été effectués, fin de la partie"
Exit Sub
End If
Wend
MsgBox "Exact"
End Sub
Oui j'ai compris je vais essayer et je vous dirai merci infiniment d'avoir pris le temps de me répondre
2) la méthode décrite est par recherche dichotomique
(pour le moment, je te laisse réfléchir en lisant bien l'énoncé, et rechercher un peu)
Bonjour.
Franchement, c'est pas mal du tout...
Petites remarques :
-> problème d'indentation possible si on mélange les espaces " " avec les tabulations "\t", surtout avec les suppressions arrières de caractères "DEL". Python a horreur de cela. Généralement, il signale ce type de problème mais ne vous dit pas où dans la ligne incriminée alors qu'à l'écran tout semble normal.
-> essayez de formater votre texte pour garder les indentations. Personnellement, j'utilise un éditeur de texte jamais de logiciel comme Word. Les éditeurs de texte ont souvent des options pour remplacer les tabulations par des espaces de taille prédéfinie : une "\t " = 3 ou 4 " ".
-> prenez l'habitude de ne jamais utiliser de lettres accentuées dans les messages. Vous risquez de voir apparaitre des symboles bizarres à moins de connaitre le type exact de police de caractères utilisées.
-> pour les boucles, commencez si possible à 0 et faites le test E < 6. Comme cela, vous comptez 6 boucles : 0, 1, 2, 3, 4, 5 et la limite 6 apparait clairement.
Sinon en pseudo-code, j'aurais fait cela en plus proche d'Algobox :
VARIABLES
E EST_DU_TYPE NOMBRE
N EST_DU_TYPE NOMBRE
S EST_DU_TYPE NOMBRE
G EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
// initialisation...
// numéro d'essais, nul par défaut
E PREND_LA_VALEUR 0
// pas gagné par defaut
G PREND_LA_VALEUR 0
// valeur secrète ~ nombre aléatoire entier compris entre 10 et 100
S PREND_LA_VALEUR randint(min, max)
// fin des 6 essais ?
TANT_QUE (E < 6) FAIRE
DEBUT_TANT_QUE
// saisie de la valeur testée
AFFICHER "Entrez votre valeur : "
LIRE N
// valeur entrée supérieure à valeur secrète ?
SI (N > S) ALORS
DEBUT_SI
// oui : trop haut
AFFICHER "C'est moins..."
FIN_SI
SINON
DEBUT_SINON
// non : valeur entrée inférieure à valeur secrète ?
SI (N <S) ALORS
DEBUT_SI
// oui : trop bas
AFFICHER "C'est plus..."
FIN_SI
SINON
DEBUT_SINON
// non : signale que l'on a gagné
G PREND_LA_VALEUR 1
// et fin de partie
Sortie de boucle...
FIN_SINON
FIN_SINON
FIN_SINON
// essais suivant
E PREND_LA_VALEUR E + 1
FIN_TANT_QUE
// partie gagnée ?
SI (G == 1) ALORS
DEBUT_SI
AFFICHER "C'est gagne... "
FIN_SI
SINON
DEBUT_SINON
AFFICHER "C'est perdu... "
FIN_SINON
FIN_ALGORITHME
Le code Python associé...
J'ai rajouté 2 choses :
- un test sur la valeur saisie
- et, surtout, afficher la valeur attendue en cas d'échec...
#*******************************************************************************
# IMPORT ***********************************************************************
#*******************************************************************************
# module pour le systeme d'exploitation
import os
# module specifique pour le systeme
import sys
# module pour les donnees aleatoires
import random
#*******************************************************************************
# MAIN *************************************************************************
#*******************************************************************************
# effacement de l'ecran (facultatif)
os.system('cls')
print(" ")
# numero d'essai, nul par defaut
E = 0
# pas gagne par defaut
G = False
# valeur secrete ~ nombre aleatoire entier compris entre 10 et 100
S = random.randint(10, 100)
# fin des 6 essais ?
while E < 6 :
# fausse valeur de N
N = 0
# pour eviter les erreurs de saisie
while N < 10 or N > 100 :
# saisie de la valeur testee
print(" Essai", E + 1, ": entrez votre valeur...")
N = int(input(" "))
print(" ")
# valeur entree superieure a valeur secrete ?
if N > S :
# oui : trop haut
print(" C'est moins...")
print(" ")
# non : valeur entree inferieure à valeur secrete ?
elif N < S :
# oui : trop bas
print(" C'est plus...")
print(" ")
else :
# non : signale que l'on a gagne
G = True
# fin de partie
break
# essai suivant
E += 1
# partie gagnee ?
if G is True :
# oui :
print(" C'est gagne...
")
else :
# non :
print(" C'est perdu...
")
print(" ")
print(" La valeur etait : ", S)
Essai 1 : entrez votre valeur...
55
C'est moins...
Essai 2 : entrez votre valeur...
25
C'est moins...
Essai 3 : entrez votre valeur...
15
C'est plus...
Essai 4 : entrez votre valeur...
20
C'est moins...
Essai 5 : entrez votre valeur...
17
C'est plus...
Essai 6 : entrez votre valeur...
18
C'est plus...
C'est perdu...
La valeur etait : 19
Essai 1 : entrez votre valeur...
55
C'est moins...
Essai 2 : entrez votre valeur...
20
C'est plus...
Essai 3 : entrez votre valeur...
35
C'est moins...
Essai 4 : entrez votre valeur...
32
C'est moins...
Essai 5 : entrez votre valeur...
30
C'est plus...
Essai 6 : entrez votre valeur...
31
C'est gagne...
Bonjour, merci à tous d'avoir pris le temps de me répondre. Malheuresement j'ai essaye plusieurs fois mais j'ai toujours le même problème avec le ''elif'' du coup je ne peux pas exécuter mon programme. Vous m'avez parler d'indentation ca consiste a quoi exactement. Merci énormément
Bonsoir.
L'indentation en Python consiste à décaler un bloc d'instructions.
Exemple, pour if... :
if condition :
instruction
...
Bonjour à tous, je dois rendre demain un dm de maths sur le logiciel python, mais j'ai un petit souci avec ma programmation
from random import*
S= randint (10,100)
E = 1
while E < 7 :
N = int(input("saisir une valeur comprise entre 10 et 100:"))
if N > S:
print("C'est moins")
elif N < S:
print("C'est plus")
else:
print("C'est gagne")
break
E= E+1
if E==7:
print("C'est perdu")
Voici mon programme mais j'ai un problème avec le ''elif'' il m'indique ''syntax error'' on m'a parlé d'indentation mais je ne sais pas qu'est ce que c'est. comment puis-je résoudre ce problème svp Merciiii beaucoup
*** message déplacé ***
Bonsoir
Python est un langage de programmation, pas un logiciel...
Il y a effectivement un gros problème d'indentation. Python est intransigeant là-dessus parce que c'est son repère. Il s'agit du retrait (l'espace) à gauche à chaque ligne, avant le texte. Après un while, ou if ou un elif par exemple, il doit y avoir un niveau de retrait (jusqu'à ce que vous ayez fini d'écrire les instructions dans le while) et le MEME pour chaque instruction. Ce n'est pas du tout le cas dans votre programme.
Pouvez-vous essayer ce code sans tabulation
import random
S = randint(10,100)
E = 1
while E < 7 :
N = int(input("saisir une valeur comprise entre 10 et 100:"))
if N > S :
print("C'est moins")
elif N < S :
print("C'est plus")
else :
print("C'est gagné")
break
E = E+1
if E==7:
print("C'est gagné")
salut
un algorithme qui permet de continuer ... même quand on a perdu
... et en anglais ... histoire d'apprendre la langue
PS : la déclaration des variables n'est plus exigée voire même bannie (consigne reçues dans l'année par l'inspection)
n = alea (10, 100)
p = 0
While p < 6
p = p + 1
Read "votre essai ?", x
If x < n Then mot = "trop grand"
If x > n Then mot = "trop petit"
If x = n Then mot = "gagné"
If mot = "gagné" Then Write "vous avez gagné en ", p, " coups"
If mot = "perdu" then Read "voulez-vous continuer ? (oui/non)", réponse
If réponse = "oui" Then
While x <> n
p = p + 1
Read "votre essai ?", x
If x < n Then mot = "trop grand"
If x > n Then mot = "trop petit"
Write "Bingo", "vous avez gagné en ", p - 1, " coups"
bonsoir à tous
@carpediem
ne faudrait-il pas initialiser mot = "perdu" avant le début du while
(si j'ai bien compris)
effectivement on pourrait ... mais il me semble que ce n'est pas obligatoire en python
ici pour p il le faut parce que le while en dépend
...
ha non !! par contre j'ai fait une erreur
après la boucle while c'est :
If mot <> "gagné Then ...
car on continue à jouer si on n'a pas gagné en 6 coups ...
car mot contient forcément quelque chose dès le premier tour de la boucle while
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :