Réalisez un programme qui demande 10 nombres entiers et qui à la fin affiche combien de multiples de 7 le joueur a saisis (l'instruction * *a%b* * donne le reste de a/b).
Pourriez vous m'aidez à faire ca svppp
bonjour !
qu'as tu commencé à faire ?
avant de programmer en python, écris l'algorithme en langage naturel avec tes mots.
vas y !
bonsoir
en attendant le retour de mon amie Leile :
ce n'est pas ce que Leile t'a demandé.
ce que tu écris pourra - peut-être - servir pour coder en python,
mais dans un premier temps, tu dois réfléchir à un algorithme :
successions de 'phrases' en langage naturel, comme si tu devais faire ce programme 'à la main'.
par exemple :
...
- je saisis un nombre entier
- je fais ceci
- si 'machin' alors je fais 'truc'...
- etc
à toi.
ensuite seulement tu pourras traduire cet enchainement d'instructions en langage python.
ah okok euh dcp
j'entre un nombre entier n
je fais n/7
a est le resultat
si a est un nombre entier ou decimal qui se finit alors afficher
et faire ca pour 10 nombres ?
il y a de l'idée
faire ca pour 10 nombres --- donc, quel outil vas-tu utiliser ?
j'entre un nombre entier n --- ok
je fais n/7 et je mets le résultat dans 'a'--- hum, l'énoncé te donne une piste avec une instruction...
in fine, tu veux savoir " combien de multiples de 7 le joueur a saisis"
merci Carita de m'avoir relayée !
(si tu peux rester, c'est bien, car je ne suis pas sûre de ma connexion qui "saute" tout le temps).
Emmux
oui, c'est pas mal ce que tu écris ; on va compléter
j'entre un nombre entier n : oui
je fais n/7
a est le resultat
si a est un nombre entier ou decimal qui se finit alors afficher
==> là, tu peux plutot dire "je regarde si le reste de la division de n par 7 vaut 0
si oui : tu proposes d'afficher, mais on te demande de compter; que peux tu faire pour les compter ?
et faire ca pour 10 nombres ? ==> OUI !
tu complètes ?
Pour les compter, euh peut etre une variable du style
t = 0
t = t+1
a chaque fois que le reste de la division est = à 0 ?
tant que une variable que l'on va appeler a est inférieur à 10 faire :
j'entre un nombre entier n
je fais n/7
je regarde si le reste de la division de n par 7 est = à 0
si c'est vrai alors faire:
afficher le resultat
sinon demander un autre nombre
tu n'es pas loin..
la boucle : comme tu sais que tu vas le faire 10 fois, une boucle FOR est mieux adaptée.
(la boucle while c'est plutôt quand tu ne sais pas combien de fois tu vas tourner).
et "si c'est vrai" alors tu dois compter. là, tu ne comptes pas.
enfin, afficher le nombre de multiples de 7, tu le feras tout à la fin, après avoir examiné les 10 nombres.
OK ?
tu rectifies ton algo ?
okok dcp,
pour une variable (que l'on va appeler a) est inférieur à 10 faire :
j'entre un nombre entier n
je fais n/7
je regarde si le reste de la division de n par 7 est = à 0
si c'est le cas faire :
t(nouvelle variable)=0
t=t+1
sinon demander un autre chiffre
afficher le resultat de t (donc le nombre de multiple de 7)
presque !
Tu as bien avancé, je complète pour toi
POUR une variable (par exemple i) allant de 1 à 10
entrer n
si le reste de la division de n par 7 est égal à zero alors
t=t+1
afficher t
ce qui est en bleu va s'éxécuter 10 fois. Tu vois ?
et quand on l'aura fait 10 fois, on affichera le résultat.
NB : t=0 ne doit etre qu'au départ, avant la boucle, si tu le mets dans la boucle, tu ne compteras rien du tout, car tu remettras 0 à chaque tour.
OK ?
A présent, tu peux essayer de le traduire en python.
Ah ok pour le t = 0 !!
t = 0
for i in range(1,10):
a = input("Entrez un nombre svp : ")
if a/7 == 0 :
t = t+1
print(t)
un truc dans le genre ?
oui, un truc dans ce genre
je corrige le range : la borne supérieure ne compte pas. Donc pour 10 tours, il faut aller de 0 à 10 ou de 1 à 11.
t=0
for i in range (0, 10) :
a= int(input("entrez un nombre svp:") ) ** pour avoir un entier
if a%7 == 0 : *** utilise l'instruction qu'on te donne !
t=t+1
print(t)
OK ?
parce que en python, le a%7 donne le reste de la division de a par 7
c'est bien ce reste qui est à zero quand a est multiple de 7.
C'est le reste de la division qui nous interesse.
si tu fais juste a/7, tu divises a par 7, tu n'auras jamais 0 (sauf si a=0, bien sur ! ).
tu vois ?
Psitt !
Bonsoir,
Ne faudrait-il pas mettre 11 à la place de 10 dans la ligne :
for i in range (0, 10) :
Sinon on ne saisit que 9 entiers ?
Me semble
salut
tout à fait :
la boucle for i in range (10) est parcourue 10 fois : de 0 à 9
la boucle for i in range (1, 10) est parcourue 9 fois : de 1 à 9
...
salut Leile
je répondais à ZEDMAT ...
une remarque : le 0 dans range(0, 10) est inutile :
range (n) est une liste indexée de 0 à n - 1, ce qui fait bien n éléments
PS : à me relire je me rend compte aussi que ma réponse est un peu maladroite entre ce "tout à fait" et ce qui suit : je donne un deuxième exemple qui peut sembler hors-sujet ... dans une certaine mesure ...
désolé !!
un autre script (maintenant que c'est fini) :
L = []
for i in range (10) :
n = int(input("nombre")
L.append (n%7)
print(L.count(0))
D'accord ! Merci.
Je "range" ma remarque qui eut été valable pour la ligne d'Emmux de 18h 56 mais pas pour celle de Leile que j'ai recopiée
C'est dommage de remplir une liste juste pour compter des zéros.
Ce sera beaucoup plus rapide comme ça, en plus de ne pas crasher si tu entres quelque chose qui ne se parse pas en entier
def get_input(msg):
while True:
try:
return int(input(msg))
except:
continue
print(sum(get_input("entrez un nombre svp:")%7 == 0 for _ in range(10)))
certes je suis resté très basique pour deux raisons :
1/ je ne suis pas très doué en python (connaissance insuffisante du langage)
2/ on s'adresse à un lycéen de première et les manipulations de listes sont au programme ...
je ne pense pas qu'un lycéen puisse produire un tel script (avec ce vocabulaire) à de rares exceptions près
pour le fun : j'ai demandé à mes élèves d'écrire un script donnant les nombres digisibles (divisible par les chiffre qui le composent) et leur nombre après une étude de ceux-ci dans un DM ...
j'ai produit un script très primaire (avec 2 ou 3 tests seulement de contrôle) qui donnait la réponse en 25 mn et j'ai dit à mes élèves que je mettais 20 à celui qui me proposait quelque chose en moins de 20 mn) ... (sur une numworks)
trois jours après un élèves me proposait un truc en 6 mn puis 2 mn et enfin 12 s et ce avec un truc très original (construction des digisibles par récursivité plutôt que de tester toutes les possibilités qui nécessairement allait être long)
résultat il a bien mérité son 20 et est venu l'exposer au tableau !!
mais n'oublions pas que nous avons pour objectif dans un premier temps de les initier ...
Vingt dious ! &A leur âge je maitrisais une demi-douzaine de langages et j'avais écrit un programme en assembleur pour faire du calcul formel sur ma TI-83, mais j'ai commencé plus tôt
Pour les digisibles j'ai pas l'énoncé exact mais on peut diviser facilement le temps d'execution grâce à des critères simples parce que 2,3,5,7 sont tous premiers : si mon nombre est divisible par tous ses chiffres, il est divisible par le produit des éléments de (qui est aussi leur ppcm).
Ce constat amène naturellement à retourner le processus et à travailler sur les chiffres plutôt que sur le nombre qu'ils forment. Si tu cherches tous les digisibles entre 1 et n, il ya d'office tous les nombres inférieurs ou égaux à 11 puisqu'ils n'ont qu'un chiffre ou bien seulement des 0 et 1. Ensuite, tu peux te limiter à un ensemble de premiers majoré par m tel que le primoriel de m <= n. On est déjà dans des temps quasi-logarithmiques comme ça je pense.
Ensuite tu testes toutes les possibilités (programmation dynamique) pour obtenir une base de chiffres de cardinal limité qui génère tous les autres, et tu rajoutes des zéros et des uns (encore programmation dynamique) partout où c'est possible. C'est une sorte de bruteforce intelligent, mais sans récursion.
Si tu interdis à tes nombres de contenir des zéros c'est encore plus facile (il ont au plus 9 chiffres), et si tu interdis aussi les doublons de chiffres c'est encore plus facile. On peut aussi combiner avec d'autres critères comme le fait qu'être divisible par 5 implique que le dernier chiffre soit 0 ou 5, et le fait qu'un nombre pair finit par un chiffre pair.
Et cersise sur le gâteau, ça se parallélise parfaitement bien tout ça
Mais je crois que je m'égare
oui une petite précision :
1/ évidemment un digisible ne peut contenir 0
2/ ses chiffres sont distincts
on montre aisément alors qu'un digisible contenant le chiffre 5 est donc impair puisque se termine par 5 ... et ne contient que des chiffres impairs ...
le critère de divisibilité par 9 (ou 3) suffit pour apporter encore des informations ... et sert aussi pour la taille maximale d'un digisible (avec la condition 2/) et même de déterminer ce maximum aisément à la main ...
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :