Projet en ISN
Fermé
Lyx
-
28 déc. 2013 à 18:06
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 29 déc. 2013 à 22:30
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 29 déc. 2013 à 22:30
A voir également:
- Projet en ISN
- Filigrane projet - Guide
- Exemple d'un projet déjà monté - Forum Programmation
- Film projet x a telecharger gratuitement - Télécharger - Outils professionnels
- Musique projet x - Forum Musique / Radio / Clip
- Gantt projet - Télécharger - Gestion de projets
3 réponses
Utilisateur anonyme
Modifié par fred1599 le 29/12/2013 à 17:35
Modifié par fred1599 le 29/12/2013 à 17:35
Bonsoir,
En effet ça ne répond pas au problème, pour faire simple on a:
-> Un nombre décidé par l'ordinateur
-> Un nombre décidé par l'utilisateur
-> Un nombre résultant des deux précédents et indiquant les chiffres qui correspondent
Si on prend un exemple, on aurait ceci
ordi : 2548
utilisateur: 1568
resultat: _5_8
Pour assigner une valeur il n'y a pas beaucoup de choix, celui que je propose est le type list. Sachant qu'on ne peut rien assigner à un entier ou à une chaîne de caractères, il nous reste la liste ou la chaine vide à concaténer.
Voici le déroulement par l'interpréteur.
Autre solution avec la chaine vide à concaténer
À vous de placer cela sous forme de code permettant de rendre les choses fonctionnelles à tout les coups (Contrôle longueur de l'entier, etc...).
Bonne continuation.
En effet ça ne répond pas au problème, pour faire simple on a:
-> Un nombre décidé par l'ordinateur
-> Un nombre décidé par l'utilisateur
-> Un nombre résultant des deux précédents et indiquant les chiffres qui correspondent
Si on prend un exemple, on aurait ceci
ordi : 2548
utilisateur: 1568
resultat: _5_8
Pour assigner une valeur il n'y a pas beaucoup de choix, celui que je propose est le type list. Sachant qu'on ne peut rien assigner à un entier ou à une chaîne de caractères, il nous reste la liste ou la chaine vide à concaténer.
Voici le déroulement par l'interpréteur.
>>> ordi = '2548'
>>> utilisateur = '1568'
>>> result = []
>>> for ind, n in enumerate(utilisateur):
... if n == ordi[ind]:
... result.append(n)
... else:
... result.append('_')
...
>>> result
['_', '5', '_', '8']
>>> ''.join(result)
'_5_8'
Autre solution avec la chaine vide à concaténer
>>> ordi = '2548'
>>> utilisateur = '1568'
>>> result = ''
>>> for ind, n in enumerate(utilisateur):
... if n == ordi[ind]:
... result += n
... else:
... result += '_'
...
>>> result
'_5_8'
À vous de placer cela sous forme de code permettant de rendre les choses fonctionnelles à tout les coups (Contrôle longueur de l'entier, etc...).
Bonne continuation.
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
Modifié par heyquem le 29/12/2013 à 21:45
Modifié par heyquem le 29/12/2013 à 21:45
fred,
Tu pars du principe que pour ordi = 2548 et utilisateur = 1568 ,
le résultat doit être: _5_8
Mais d'après ce que dit Lyx dans sa question, il faut plutôt que le résultat donne la quantité de chifres bien placés et la quantité de chifres mal placés.
Ce qui, soit dit en passant, passe sous silence le fait qu'il peut y avoir aussi des chiffres présents dans le nombre 'utilisateur' mais pas dans le nombre 'ordinateur', mais leur quantité est facile à déduire des deux précédentes.
Ainsi, pour reprendre l'exemple de Lyx:
Nota bene: on pourrait aussi considérer qu'il n'y a qu'un 2 qui est mal placé et que le second n'est pas présent dans le nombre 'ordinateur'.
Par exemple si
Mais ce serait le même résultat pour
Pourtant dans le premier cas,
ton résultat dira
et dans le deuxième cas
ce sera
On voit bien que c'est plus facile de continuer après tes résultats qu'avec ceux voulus par Lyx.
Tu pars du principe que pour ordi = 2548 et utilisateur = 1568 ,
le résultat doit être: _5_8
Mais d'après ce que dit Lyx dans sa question, il faut plutôt que le résultat donne la quantité de chifres bien placés et la quantité de chifres mal placés.
Ce qui, soit dit en passant, passe sous silence le fait qu'il peut y avoir aussi des chiffres présents dans le nombre 'utilisateur' mais pas dans le nombre 'ordinateur', mais leur quantité est facile à déduire des deux précédentes.
Ainsi, pour reprendre l'exemple de Lyx:
ordinateur = 3265le résultat doit être
utilisateur = 3822
1 bien placé (le 3)Cette sorte de résultat préserve l'intérêt, déjà tout relatif du jeu, en ne donnant pas trop de renseignements.
2 mal placés (les 2)
1 non présent (le 8)
Nota bene: on pourrait aussi considérer qu'il n'y a qu'un 2 qui est mal placé et que le second n'est pas présent dans le nombre 'ordinateur'.
Par exemple si
ordinateur = 3628le résultat devra être
utilisateur = 3278
2 bien placés (le 3 et le 8)
1 mal placé (le 2)
1 non présent (le 7)
Mais ce serait le même résultat pour
ordinateur = 3628
utilisateur = 7623
Pourtant dans le premier cas,
ton résultat dira
3 _ _ 8,
et dans le deuxième cas
ce sera
_ 6 2 _
On voit bien que c'est plus facile de continuer après tes résultats qu'avec ceux voulus par Lyx.
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
Modifié par heyquem le 29/12/2013 à 22:39
Modifié par heyquem le 29/12/2013 à 22:39
Lyx,
- En écrivant
- D'après la façon dont tu écris
En Python 3,
Si tu fais
- Je te signale en outre que 1 est un chifre, 2 est un chiffre, ....il n'y a que 10 chiffres,
et que les nombres sont formés de 1 ou plusieurs chifres
Ecrire "suite de nombres" porte donc à confusion
J'organiserais l'algorithme de la façon suivante, personnellement:
- En écrivant
Ordi=[randint(1111,8888)]tu places le nombre aléatoire dans une liste, ce n'est pas nécessaire.
- D'après la façon dont tu écris
print()avec des parenthèses, tu utilises Python 3.
En Python 3,
input()enregistre l'ntrée sous forme de chaîne, tout le temps.
Si tu fais
int(input())tu transforms cette chaîne en entier, ce qui n'est pas astucieux puisque tu vas devoir examiner les chiffres en tant que caractères.
- Je te signale en outre que 1 est un chifre, 2 est un chiffre, ....il n'y a que 10 chiffres,
et que les nombres sont formés de 1 ou plusieurs chifres
Ecrire "suite de nombres" porte donc à confusion
J'organiserais l'algorithme de la façon suivante, personnellement:
from random import *
Ordi=str(randint(1111,8888)) #Nombre au hasard choisi par l'ordi
Util=input("Quelle est la suite de chiffres "
"choisie par l'ordinateur ?\n\n"
"Entrez un nombre à 4 chiffres : ")
#Nombre choisi par l'utilisateur
print(Ordi)
while Ordi!=Util:
Util=raw_input("Entrer un nouveau nombre de 4 chiffres : ")
for i in (0,1,2,3):
if Ordi[i]==Util[i]:
# code à compléter
print("Gagné!")