Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
Discussion fermée
#1 27-10-2016 16:25:07
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 988
[Python & tous langages] Exo sympa : enfants et interrupteurs
Bonjour à tous,
Voici un sujet trouvé sur un forum dédié à la programmation Python.
Devoir de vacances en Python (classe : Terminale S option ISN) :
276 lampes sont numérotées de 1 à 276. Pour passer le temps, 25 enfants appuient sur les interrupteurs à tour de rôle. Le premier enfant presse chaque interrupteur. Le second presse les boutons 2,4,6, etc, (il presse les interrupteurs ayant un numéro multiple de 2). Le troisième appuie sur les interrupteurs 3, 6, 9, etc, (multiples de 3). Le quatrième presse tous les interrupteurs ayant un numéro multiples de 4, et ainsi de suite jusqu'au 25ème enfant. Avant le passage du premier enfant, toutes les ampoules sont éteintes.
1. Combien d'ampoules seront allumées après le passage des 25 enfants ?
2. Proposer une évolution du programme permettant à l'utilisateur de faire varier le nombres d'enfants.
3. Proposer une évolution du programme permettant à l'utilisateur de faire varier le nombre d'ampoules.
J'ajoute un pt'it quelque chose à la Q1 : Et lesquelles ?
A vous lire
Arx Tarpeia Capitoli proxima...
Hors ligne
#2 28-10-2016 04:26:54
- tibo
- Membre expert
- Inscription : 23-01-2008
- Messages : 1 097
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
Salut,
Dernière modification par tibo (28-10-2016 04:27:18)
A quoi sert une hyperbole?
----- A boire de l'hypersoupe pardi !
Hors ligne
#3 28-10-2016 09:54:28
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 988
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
Salut,
En anglais, on qualifie Python de très user friendly, du moins au début...
Je n'aime pas le C.
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#4 28-10-2016 13:54:45
- freddy
- Membre chevronné
- Lieu : Paris
- Inscription : 27-03-2009
- Messages : 7 457
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
Salut
Remarque :
d'un strict point de vue arithmétique, c'est un très joli sujet !
De la considération des obstacles vient l’échec, des moyens, la réussite.
Hors ligne
#5 28-10-2016 17:31:04
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 988
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
Salut,
Je suis bien d'accord avec ta remarque.
Déjà avec 25 gamins et 276 interrupteurs, il est hors de question de remplir 276 colonnes : il est nécessaire de réfléchir un peu...
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#6 28-10-2016 18:07:27
- tibo
- Membre expert
- Inscription : 23-01-2008
- Messages : 1 097
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
Je viens de voir ta remarque.
Attation ! le résultat de input() est un string...
J'ai vérifié et en fait c'est du type de ce que rentre l'utilisateur :
tibo@tiboNetwork:~/$ python
Python 2.7.11+ (default, Apr 17 2016, 14:00:29)
[GCC 5.3.1 20160413] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a=input()
5
>>> a
5
>>> type(a)
<type 'int'>
>>> b=input()
"toto"
>>> b
'toto'
>>> type(b)
<type 'str'>
>>> c=input()
5.1
>>> c
5.1
>>> type(c)
<type 'float'>
>>> d=input()
[4,5,9]
>>> d
[4, 5, 9]
>>> type(d)
<type 'list'>
>>>
Mais ça a peut-être changé avec la version 3
Dernière modification par tibo (28-10-2016 18:09:11)
A quoi sert une hyperbole?
----- A boire de l'hypersoupe pardi !
Hors ligne
#7 28-10-2016 19:09:51
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 988
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
Aven
Oui, le input() est déconseillé avec les versions 2.x : pour une question de sécurité à ce que disent les spécialistes... Il est recommandé d'utiliser raw_input() qui donne un string... J'avais oublié !
Effectivement dans les versions 3.x (j'ai la 3.5 avec numpy, matplotlib et Scipy ajoutés) raw_input() a été abandonné laissant la place au seul input() qui offre un string en sortie.
De même en 2.x, tu avais xrange() plus rapide que range() parce que xrange() ne calculait pas d'abord tous les nombres. En contrepartie, il était limité...
Les versions 3.x ont rationnalisé et laissé que le seul range() qui se comporte comme le faisait xrange()...
Print est devenu une fonction mais print() marche en 2.x.
Encore un changement : en Python 2.x,
>>> 3/5
0
>>> 6/4
1
En 3.x
Mais
>>> 3.0/5
0.6
>>> 6.4
1.5
>>> 6//4
1
Pour obtenir le même comportement en 2.x, on ajoute un import :
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#8 29-10-2016 12:11:14
- jpp
- Membre
- Inscription : 31-12-2010
- Messages : 1 105
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
salut.
Ne connaissant rien à la programmation , alors par l'arithmétique et manuellement :
soit E le nombre d'enfants et L le nombre de lampes .
pour chaque N° de lampe , je cherche tous les diviseurs de N qui sont <E+1
1) Si ce nombre de diviseurs est impair , alors la lampe N finira allumée
2) Si ce nombre de diviseurs est pair , elle finira éteinte.
mais manuellement ça risque d'être long .
Hors ligne
#9 29-10-2016 13:50:27
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 988
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
Ave,
mais manuellement ça risque d'être long
...
Je dirais même plus, longuet... : 6/7 lignes en Python (et on doit pouvoir faire mieux).
J'aurais pris le pb à l'envers (pas vraiment cherché donc pas optimal).
Après le passage, du 1er gamin, toutes les lampes sont allumées et la n° 1 le restera
A partir du n°2 la 2 sera éteinte et le restera et pour n de 1 à 276, on appuiera sur 2n, 3n, 4 n...
J'aurais répertorié le nombre d'appuis sur chaque interrupteur et appliqué un modulo 2...
jpp, qu'est-ce qui t'empêche de te mettre à la programmation ? Ça ne t'inspire pas ? Surtout qu'avec Python et un esprit logique et structuré, ça avance assez vite !
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#10 30-10-2016 16:07:10
- jpp
- Membre
- Inscription : 31-12-2010
- Messages : 1 105
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
salut yoshi .
j'ai téléchargé python 3.4.5 mais n'arrive pas à l'ouvrir . Donc j'ai tout supprimé.
j'avais visionné auparavant 3h de vidéo pour commencer quelque chose .
Que me conseilles-tu comme logiciel python (parce qu'il y en a cent versions)? et surtout comment l'ouvre - t -on ?
merci.
n.b. je suis un boulet en informatique. je suis sur Windows 8-1
Dernière modification par jpp (30-10-2016 16:10:23)
Hors ligne
#11 30-10-2016 16:32:17
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 988
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
Salut,
téléchargé python 3.4.5 mais n'arrive pas à l'ouvrir
Pas très clair : qu'est-ce que tu entends par : je n'arrive pas à l'ouvrir.
Version Python que je te conseille :
https://www.python.org/ftp/python/3.5.2 … -amd64.exe
Pour installer.
Clic droit sur le fichier et choisis Exécuter en tant qu'Administrateur : ton problème doit être celui-ci...
Ce sont les restrictions de Windows.
Et choisis de l'installer pour tous les utilisateurs, même si tu es le seul sur ta bécane ; ça te permettra de me localiser plus facilement ultérieurement (ou à moi de t'aider à...).
Si tu l'as fait, vois-tu une icône sur le bureau pour lancer Python ?
Si oui, no pb...
S non, je t'indiquerai comment en mettre une...
Ensuite pour ton apprentissage, télécharge ce bouquin (gratuit) conçu pour un débutant absolu :
https://inforef.be/swi/download/apprendre_python3_5.pdf
Au début, tu vas te familiariser avec les notions de base et l’Éditeur (IDLE) par défaut.
Franchement, quand tu commences à programmer, tu prends un plaisir fou à voir la machine exécuter ce que tu lui demandes via le logiciel...
@+
Dernière modification par yoshi (30-10-2016 20:09:07)
Arx Tarpeia Capitoli proxima...
Hors ligne
#12 31-10-2016 09:49:53
- jpp
- Membre
- Inscription : 31-12-2010
- Messages : 1 105
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
salut .
@yoshi : je te remercie encore . j'ai téléchargé python et le manuel via les 2 liens que tu m'as indiqués.
Il me reste maintenant à cogiter , mais je sais que ça ne va pas être de la tarte pour un débutant comme moi.
à plus.
Hors ligne
#13 31-10-2016 11:03:10
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 988
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
Re,
Bah !
Il y a une chose que j'ai apprise : quand on programme, il faut être patient, il est rare que ça marche du 1er coup et c'est très frustrant au début, mais on finit par on prendre son parti (bien obligé)...
Le bouquin est très bien conçu pour un débutant intégral.
T'as bien une icône Python sur ton bureau ?
tibo, moi et d'autres, on sera là pour te soutenir, n'hésite pas...
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#14 04-11-2016 14:02:35
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 988
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
Re,
Alors jpp, ça avance ?
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#15 04-11-2016 20:37:50
- jpp
- Membre
- Inscription : 31-12-2010
- Messages : 1 105
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
salut yoshi .
ben , ça suit son ptit bonhomme de chemin . je suis retourné à l'age de 6 ans (apprentissage d'un second langage) .
non ! je blague .
Hors ligne
#16 04-11-2016 21:11:29
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 988
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
Salut,
Je comprends...
Les débuts ne sont pas très marrants.
Je me souviens de mes débuts au Kendo (où on apprend les différentes marches qui y sont utilisées) ou les échecs...
J'en ai bavé.
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#17 05-11-2016 10:27:42
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 988
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
Re,
Swinnen le dit, mais n'insiste pas assez :
la clé de voûte de Python, c'est l'indentation...
C'est l'indentation qui permet de déterminer les blocs.
L'indentation peut se faire au début avec des espaces ou des tabulations. Dans les versions précédentes de Python, on disait : jamais les deux. D'autant qu'on ne voit pas la différence et que ça déclenchait un message d'erreur...
J'ai voulu voir si le message d'erreur indiquait la ligne fautive (sinon bonjour la recherche à l'aveugle ; ça m'était arrivé) mais je viens de tester : j'ai mélangé les espaces et la touche TAB. Python n'a pas râlé !
Tant pis (ou tant mieux), mais je conserverai mes habitudes...
As-tu attaqué la notion de boucle (boucle while et boucle for) ?
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#18 05-11-2016 15:33:51
- jpp
- Membre
- Inscription : 31-12-2010
- Messages : 1 105
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
salut.
@yoshi : pourrais-tu m'expliquer ce qui ne va pas dans ma syntaxe .
>>> a = 20
>>> if (a>100):
print ("a dépasse la centaine")
else: l'écriture de else me génère déjà une erreur de syntaxe
print ("a ne dépasse pas la centaine")
sur le bouquin page 23 les 3 points " . . . " sont en début de ligne . chez moi il n'y sont pas ; lorsque je les mets , j'ai toujours
un message d'erreur.
>>> a = 20
>>> if (a > 100):
... print("a dépasse la centaine")
... else:
... print("a ne dépasse pas cent") --> ça , c'est l'exemple dans le cours.
pourquoi ce message d'erreur systématique ; les parenthèses après if sont - elles en trop ?
de toute façon , quelque soit le décalage de "else" , il génère toujours une erreur de syntaxe.
merci .
Dernière modification par jpp (05-11-2016 16:04:26)
Hors ligne
#19 05-11-2016 16:35:18
- tibo
- Membre expert
- Inscription : 23-01-2008
- Messages : 1 097
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
Salut,
a priori pas de raison que ça plante...
Il ne faut pas d'espace du tout devant le else:
(et encore moins des points)
[edit]
Je viens de regarder le tuto de Swinen, et effectivement il met des "..." dans ses exemples sur IDLE.
Je ne sais pas à quoi ça correspond. Il ne faut pas en mettre.
Dernière modification par tibo (05-11-2016 16:37:13)
A quoi sert une hyperbole?
----- A boire de l'hypersoupe pardi !
Hors ligne
#20 05-11-2016 16:46:54
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 988
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
Salut,
Non, les parenthèses ne sont pas la cause du problème : elles sont inutiles, c'est tout (mais ça marche quand même avec...)
Oui, j'ai pu constater aussi que les ... n'apparaissent pas : je n'ai jamais su pourquoi, il prétendait le contraire, même dans les versions antérieures de Python (y compris la branche 2.x)
C'est juste un problème d'indentation...
l'éditeur IDLE est un peu pénible, et quoi qu'en dise Swinnen, il a une logique à part...
Le prompt >>> ne produit pas une vraie indentation.
Il est là et l'espace après juste pour te dire que tu as la main.
Donc en fait, ton if a >100 n'est pas indenté de 4 espaces, c'est une illusion...
Pour éviter les soucis, fais comme ça :
>>> if a >100: # Là tu appuies sur ENTREE et tu tapes le print :
>>> if a > 100:
print ("a dépasse la centaine")
Là tu retapes ENTREE et ton curseur est aligné sous le print
Tu appuies sur la touche retour arrière qui te ramènes au point où devrait être le if s'il n'y avait pas ce satané >>>+espace
Et tu contines, tu tapes le else:
Puis ENTREE (tu es correctement indenté)
Et tu pas tapes le print, puis à la fin, ENTREE 2 fois.
Tu utilises la console Windows, il faut savoir que l'indentation y est de 8 espaces.
Contournement de ce souci
1. Tu ouvres le Bloc-notes de Windows et tu tapes tes commandes en respectant ton identation.
Comme ceci :
if (a>100):
print ("a dépasse la centaine")
else:
print ("a ne dépasse pas la centaine")
Et tu copies le tout et tu colles dans la console juste après le >>> à l'endroit du curseur clignotant.
Puis ENTREE 2 fois. Mêne un copier/coller de ce que j'ai écrit ci-dessus marche...
2. Depuis ta console, tu cliques sur File, puis sur New file : une page blanche s'ouvre.
La tu tapes normalement ce que tu vois ci-dessus.
Cela fait tu vas à File, et tu choisis SAVE ou SAVE AS, tu choisis un nom et tu valides.
Puis tu appuies sur F5 ou clic Run puis Run File
L'indentation standard est de 4 espaces, mais tu peux choisir ce que tu veux pourvu que tu t'y tiennes dans un même scrpit.
Essaie les 2 méthodes avec ça :
if (a>100):
print ("a dépasse la centaine")
else:
print ("a ne dépasse pas la centaine...")
if a >50:
print ("mais il est plus grand que 50 !")
else:
print ("et même pas la cinquantaine")
Le copier.coller de mon essai donne ça :
>>> a=60
>>> if (a>100):
print ("a dépasse la centaine")
else: -----------------------> à partir d'ici l'appui sur ENTREE te donnera l'indentation correcte
print ("a ne dépasse pas la centaine...")
if a >50:
print ("mais il est plus grand que 50 !")
else:
print ("et même pas la cinquantaine")
a ne dépasse pas la centaine...
mais il est plus grand que 50 !
>>>
A partir des deux points suivant le 1er else, l'appui sur ENTREE te donnera à chaque fois) l'indentation correcte0
Je n'utilise plus la console que pour des essais rapides (je m'en sers comme calculette)...
J'ai été clair ?
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#21 05-11-2016 20:25:58
- jpp
- Membre
- Inscription : 31-12-2010
- Messages : 1 105
Re : [Python & tous langages] Exo sympa : enfants et interrupteurs
re .
SyntaxError: invalid syntax
>>> a = 20
>>> if (a>20):
print("a dépasse la centaine")
else:
SyntaxError: unindent does not match any outer indentation level
>>>
>>> a=20
>>> if a>100:
print("a dépasse la centaine")
else:
print("a ne dépasse pas la centaine")
a ne dépasse pas la centaine
>>>
c'est ok ; j'en tiendrais compte par la suite .
et merci encore à tous les deux.
Hors ligne
Pages : 1
Discussion fermée