Inscription / Connexion Nouveau Sujet
Niveau première
Partager :

Python

Posté par
Emmux
18-11-21 à 17:05

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

Posté par
Leile
re : Python 18-11-21 à 17:18

bonjour !

qu'as tu commencé à faire ?

avant de programmer en python, écris l'algorithme en langage naturel avec tes mots.
vas y !

Posté par
Emmux
re : Python 18-11-21 à 17:54

deja utiliser input et int
puis peu etre une variable?
et a la fin un print()

Posté par
Emmux
re : Python 18-11-21 à 18:03

Genre
int(input("Entrez un nombre :   )
ou alors avec float ?

Posté par
carita
re : Python 18-11-21 à 18:07

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.

Posté par
Emmux
re : Python 18-11-21 à 18:13

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 ?

Posté par
carita
re : Python 18-11-21 à 18:22

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"

Posté par
carita
re : Python 18-11-21 à 18:22

je laisse la main  à Leile

Posté par
Leile
re : Python 18-11-21 à 18:24

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 ?

Posté par
Emmux
re : Python 18-11-21 à 18:26

ok ok merci bcp

pour le "faire ca pour 10 nombres" je pensais à une boucle ?

Posté par
Emmux
re : Python 18-11-21 à 18:27

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 ?

Posté par
Leile
re : Python 18-11-21 à 18:28

oui, une boucle, c'est très bien.
Vas y, montre (en langage naturel) l'algo complet.

Posté par
Leile
re : Python 18-11-21 à 18:29

pour les compter, oui, ce que tu proposes est très bien aussi.

écris l'algo complet !

Posté par
Emmux
re : Python 18-11-21 à 18:33

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

Posté par
Leile
re : Python 18-11-21 à 18:36

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 ?

Posté par
Emmux
re : Python 18-11-21 à 18:42

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)

Posté par
Leile
re : Python 18-11-21 à 18:50

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.

Posté par
Emmux
re : Python 18-11-21 à 18:56

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 ?

Posté par
Emmux
re : Python 18-11-21 à 19:03

euh j'ai oublié le int avant le input
dcp ca sera

a = int(input("Entrez un nombre svp :   "))

Posté par
Leile
re : Python 18-11-21 à 19:04

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 ?

Posté par
Emmux
re : Python 18-11-21 à 19:06

Ok , juste pourquoi utiliser le % et pas le / ou // ?

Posté par
Emmux
re : Python 18-11-21 à 19:09

ah oui non enfait c'est dans l'ennonce ^^'
Merci bcp vraiment !!

Posté par
Leile
re : Python 18-11-21 à 19:11

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 ?  

Posté par
Leile
re : Python 18-11-21 à 19:12

je t'en prie.
Bonne soirée.

Posté par
Emmux
re : Python 18-11-21 à 19:13

Merci à vous/toi aussi

Posté par
ZEDMAT
re : Python 18-11-21 à 19:48

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

Posté par
carpediem
re : Python 18-11-21 à 19:56

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

...

Posté par
Leile
re : Python 18-11-21 à 19:57

bonjour ZEDMAT,
in range (0 , 10) tourne pour i=0  à 9   soit   10 fois.

Posté par
Leile
re : Python 18-11-21 à 20:01

carpediem
  je n'ai pas écrit (1, 10)   mais (0, 10) !

Posté par
carpediem
re : Python 18-11-21 à 20:47

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))


l'instruction L.count(0) compte le nombre d'occurrences de 0 dans la liste L

Posté par
ZEDMAT
re : Python 18-11-21 à 21:38

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

Posté par
Ulmiere
re : Python 19-11-21 à 11:25

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)))

Posté par
carpediem
re : Python 19-11-21 à 18:41

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 ...

Posté par
Ulmiere
re : Python 19-11-21 à 19:45

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 \{2,3,5,7\}\cap\{\textrm{chiffres}\} (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

Posté par
carpediem
re : Python 19-11-21 à 20:04

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 :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1674 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !