#1 Le 21/09/2013, à 12:43
- blafo
Mes leçons
Bonjour
J'essaie d'apprendre le python et là je bloque au point de me demander si je vais continuer. Je suis inscris sur france ioi et je bloque à l'exercice ci-dessous
À la récréation, vous croisez un groupe d'enfants qui vous proposent de participer à leur jeu. Vous acceptez de bon cœur et voilà votre robot engagé dans une partie de cache-cache !
Ce que doit faire votre programme :
Le robot devra compter jusqu'à 100, c'est à dire afficher les entiers de 1 à 100, un par ligne, et ensuite afficher "J'arrive !". Ainsi, s'il ne devait compter que jusqu'à 3 au lieu de 100, votre robot devrait afficher :
↳
1
2
3
J'arrive !
Remarque : votre programme doit être court, une dizaine de lignes au maximum.
Vous ne pourriez pas m'aider un peu. Au pire me donner le résultat afin que je l'étudie et que je vois si je continue ou pas. Il ne sert à rien de continuer si je ne comprend rien n'est-ce pas?
Merci de vos réponses
Toujours grand merci de vos réponses au cas où j'oublierais
Je crains que Stephen King est mort depuis quelques temps déja...
Hors ligne
#2 Le 21/09/2013, à 13:09
- pingouinux
Re : Mes leçons
Bonjour,
Qu'as-tu déjà essayé de faire ?
Tu peux initialiser la variable n à 1.
Tu fais un boucle dans laquelle tu imprimes n, tu l'incrémentes de 1, et tu quittes la boucle si n a atteint le maximmum.
On s'en sort avec 3 lignes de code.
Hors ligne
#3 Le 21/09/2013, à 15:25
- blafo
Re : Mes leçons
Slt
a=1
b=101
c=b-a
p=a+1
for loop in range (100):
print p
Toujours grand merci de vos réponses au cas où j'oublierais
Je crains que Stephen King est mort depuis quelques temps déja...
Hors ligne
#4 Le 21/09/2013, à 15:54
- pingouinux
Re : Mes leçons
Tu imprimes 100 fois la valeur de p, qui vaut 2
a=1
b=101
c=b-a # Tu ne te sers pas de la variable c
p=a+1 # Ici, p vaut 2
for loop in range (100):
print p # Il faut indenter le contenu de la boucle
Suggestion
n=1
while n<=100 : print(n); n+=1
print("J'arrive !")
Ajouté :
Ou bien
for loop in range(1,101) : print(loop)
print("J'arrive !")
Dernière modification par pingouinux (Le 21/09/2013, à 15:57)
Hors ligne
#5 Le 21/09/2013, à 16:22
- blafo
Re : Mes leçons
Afin de voir la correction(que l'on ne peux voir tant qu'on a pas résolu le problème), j'ai copié un des codes ci-dessus proposés. J'ai eu la correction qui est la suivante:Je vais maintenant essayer d'analyser l'affaire!!!
Merci
nombre = 1
for loop in range(100):
print(nombre)
nombre = nombre + 1
print("J'arrive !")
Toujours grand merci de vos réponses au cas où j'oublierais
Je crains que Stephen King est mort depuis quelques temps déja...
Hors ligne
#6 Le 21/09/2013, à 16:48
- pingouinux
Re : Mes leçons
Il se complique la vie. Autant utiliser la variable loop qui s'incrémente toute seule.
for loop in range(100):
print(loop+1)
print("J'arrive !")
Remarque :
Pour afficher les scripts, il est préférable d'utiliser les balises-codes <>, comme dans ton premier message.
Hors ligne
#7 Le 21/09/2013, à 17:05
- blafo
Re : Mes leçons
D'autant plus que ton dernier code est on ne peux plus clair. C'est comme ça. C'est rassurant pour moi
Toujours grand merci de vos réponses au cas où j'oublierais
Je crains que Stephen King est mort depuis quelques temps déja...
Hors ligne
#8 Le 21/09/2013, à 20:19
- tiramiseb
Re : Mes leçons
Salut,
En effet, la correction que tu nous montres est vraiment mal codée...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#9 Le 24/09/2013, à 11:00
- loutre
Re : Mes leçons
Après tu peux t'amuser à le faire en une ligne :
print '\n'.join([str(i) for i in xrange(1, 101)] + ["j'arrive !"])
Dernière modification par loutre (Le 24/09/2013, à 11:00)
=°.°=
J'ai éprouvé l'irrésistible désir d'aller porter ma jeune existence au-delà de l'horizon, là où l'espace et le vent offrent à l'homme une dimension que je voyais comme une éternité palpable. Mes blogs [url=http://[Merci de relire les règles]/d6wsyxp]au Tchad[/url], vers Compostelle.
Hors ligne
#10 Le 24/09/2013, à 11:21
- blafo
Re : Mes leçons
print '\n'.join([str(i) for i in xrange(1, 101)] + ["j'arrive !"])
Oui mais là, ce n'est pas du tout dans mes compétances
Toujours grand merci de vos réponses au cas où j'oublierais
Je crains que Stephen King est mort depuis quelques temps déja...
Hors ligne
#11 Le 24/09/2013, à 11:42
- tiramiseb
Re : Mes leçons
print '\n'.join([str(i) for i in xrange(1, 101)] + ["j'arrive !"])
Oui mais là, ce n'est pas du tout dans mes compétances
Il faut détailler pour comprendre :
print
afficher
'\n'.join([str(i) for i in xrange(1, 101)] + ["j'arrive !"])
le résultat de la méthode "join" avec tel et tel argument sur la chaîne "\n".
La méthode "join" prend en argument une liste qui contient plusieurs chaînes et les concatène en utilisant la chaîne d'origine (donc le "\n") comme séparateur. (je n'invente rien, tout ça est expliqué dans la documentation de Python ainsi que dans l'aide interactive à laquelle tu accèdes par "help(string)" dans l'invite Python).
[str(i) for i in xrange(1, 101)] + ["j'arrive !"]
On concatène deux listes grâce à l'opérateur "+".
[str(i) for i in xrange(1, 101)]
Là c'est un peu spécial, grâce à la syntaxe "[ X for Y in Z ]", ça crée une liste contenant des éléments X en bouclant sur Z, la variable de la boucle étant Y.
xrange est à peu près comme range, sauf qu'au lieu de créer une liste en mémoire, c'est un itérateur qui parcourt tous les éléments du "range" demandé.
Et on reprend dans l'autre sens :
xrange(1, 101)
=> génère les entiers 1, 2, 3, 4, 5 ... 101
for i in xrange(1, 101)
=> fait une boucle sur les entier générés
str(i)
=> convertit la variable "i" en chaîne de caractères
[str(i) for i in xrange(1, 101)]
=> fait une liste de chaînes de caractères correspondant à des entiers : [ "1", "2", "3", ... "101" ]
[str(i) for i in xrange(1, 101)] + ["j'arrive !"]
=> concatène les deux listes : [ "1", "2", "3", ... "101", "j'arrive !" ]
'\n'.join([str(i) for i in xrange(1, 101)] + ["j'arrive !"])
=> concatène les chaînes contenues dans la liste : "1\n2\n3\n...\n101\nj'arrive !"
print '\n'.join([str(i) for i in xrange(1, 101)] + ["j'arrive !"])
=> affiche la chaîne ci-dessus
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#12 Le 03/10/2013, à 08:46
- blafo
Re : Mes leçons
Salut. Excuse moi, j'ai mis un peu de temps pour répondre. Que dire? Je regarde...
Autrement, j'ai un autre exo, je peux le mettre pour aide?
Toujours grand merci de vos réponses au cas où j'oublierais
Je crains que Stephen King est mort depuis quelques temps déja...
Hors ligne
#13 Le 03/10/2013, à 09:14
- grim7reaper
Re : Mes leçons
Tu peux.
Mais le mieux serait d’ouvrir un autre sujet avec un titre explicite, et dedans tu poses ton problème (avec ce que tu as déjà essayé de faire pour le résoudre).
Hors ligne
#14 Le 03/10/2013, à 11:29
- blafo
Re : Mes leçons
Bonjour
merci de la réponse. Néanmoins, je ne vois pas l'utilité de créer un post à chaque fois que j'ai un problème sur une leçon. Peut être que je me trompe! mais bon. Donc...
L'automne ayant été très pluvieux les BufoAlgo, une espèce locale de crapauds, se sont reproduits en grand nombre, et les habitants ont constaté que leur nombre doublait chaque semaine ! En effet, ils peuvent se reproduire très très vite. Leurs prédateurs naturels, les couleuvres (un type de serpent), sont complètement dépassés !
Avoir trop de crapauds est très gènant (on ne peut plus dormir !), les villageois décident donc d'élever un grand nombre de couleuvres puis de les relâcher afin de contrôler le nombre de crapauds. Il leur faut estimer le nombre de crapauds (donc le nombre de couleuvres à élever) au cours des semaines qui viennent. Ils vous demandent votre aide.
Ce que doit faire votre programme :
Sachant qu'il y a actuellement 1337 crapauds et que leur nombre double chaque semaine, votre programme devra afficher le nombre de crapauds qu'il y aura dans 12 semaines.
Voila ce que j'ai fais :
semaine=1337
for loop in range(12):
print(semaine)
semaine=semaine*2
Ce que me dit le robot
Erreur de compilation :
line 4:
print(semaine 12)
^
SyntaxError: invalid syntax
En fait, j'ai testé avec Geany, ça fonctionne, seulement je ne dois apparemment afficher que le résultat au bout de 12 semaines. Et c'est là que ça bloque
Voila, si vous voulez bien m'aider, merci
Toujours grand merci de vos réponses au cas où j'oublierais
Je crains que Stephen King est mort depuis quelques temps déja...
Hors ligne
#15 Le 03/10/2013, à 11:49
- pingouinux
Re : Mes leçons
Salut,
Il ne manque pas grand-chose à ton script en #14 :
#!/usr/bin/python3
semaine=1337
for loop in range(12):
# print(semaine)
semaine=semaine*2
print(semaine)
ou
#!/usr/bin/python3
semaine=1337
print(semaine*2**12)
Dernière modification par pingouinux (Le 03/10/2013, à 11:50)
Hors ligne
#16 Le 03/10/2013, à 14:36
- blafo
Re : Mes leçons
nbCrapauds = 1337
for loop in range(12):
nbCrapauds = nbCrapauds * 2
print(nbCrapauds)
La réponse du robot
Toujours grand merci de vos réponses au cas où j'oublierais
Je crains que Stephen King est mort depuis quelques temps déja...
Hors ligne
#17 Le 04/10/2013, à 08:15
- blafo
Re : Mes leçons
Arghh!
Amis du jour bonjour voici mon cours.
C'est la dernière semaine de cours et l'école organise une grande kermesse. L'un des stands, "La Foire aux bonbons", propose un jeu permettant
de gagner des bonbons. Le jeu est simple : il faut atteindre le plus grand nombre de fois possible une cible sans jamais la rater. On peut gagner gros
, car
plus on touche la cible, et plus on gagne de bonbons à chaque fois qu'on touche la cible ! Les élèves aimeraient connaître le nombre de bonbons
qu'ils peuvent gagner en fonction du nombre de tirs consécutifs réussis.
Ce que doit faire votre programme :
Toucher la cible au premier tir rapporte un bonbon, toucher la cible au deuxième tir rapporte deux bonbons de plus, la toucher au troisième tir
rapporte encore trois bonbons de plus, etc... Écrivez un programme qui affiche sur la première ligne le nombre total de bonbons obtenus si l'on
ne réussit que 1 tir, puis qui affiche sur la deuxième ligne le nombre de bonbons récupérés si l'on réussit 2 tirs de suite, puis sur la troisième
ligne
le nombre de bonbons récupérés si l'on réussit 3 tirs de suite, etc... jusqu'à la valeur que l'on peut récupérer si l'on réussit 50 tirs de suite.
Par exemple, si votre programme s'arrêtait à 5 et non à 50, il devrait afficher ceci :
1
3
6
10
15
Mes compétences s'arrêtent là:
nombre = 1
for loop in range (49):
print (nombre)
nombre = nombre+1
print (nombre)
Sans me donner la réponse, tant que je ne la demande pas, pouvez-vous m'aiguiller? Merci
Toujours grand merci de vos réponses au cas où j'oublierais
Je crains que Stephen King est mort depuis quelques temps déja...
Hors ligne
#18 Le 04/10/2013, à 08:19
- blafo
Re : Mes leçons
je comprend bien que :
1=1
2=3
3=6
4=10
5=15
6=21
7=28
8=36 etc...
Il me faut donc une variable nombre et une variable résultat qui est l'addition de nombre + résultat précédent, non?
Toujours grand merci de vos réponses au cas où j'oublierais
Je crains que Stephen King est mort depuis quelques temps déja...
Hors ligne
#19 Le 04/10/2013, à 08:39
- pingouinux
Re : Mes leçons
Salut,
for loop in range (49):
Ta boucle est parcourue 49 fois, et non 50 (loop variant de 0 à 48).
Pour faire varier loop de 1 à 50, c'est
for loop in range(1,51) :
Tu devrais initialiser nombre à 0, et non à 1. Ensuite, chaque fois que tu passes dans la boucle, il suffit de lui ajouter la valeur de loop.
Hors ligne
#20 Le 04/10/2013, à 13:12
- blafo
Re : Mes leçons
Bonjour
je ne pense pas devoir initialiser nombre à 0 car le jeu commence à 1.
Autrement ....range (1,51): c'est fait. Bon après, je ne vois pas, du moins pas encore...
Toujours grand merci de vos réponses au cas où j'oublierais
Je crains que Stephen King est mort depuis quelques temps déja...
Hors ligne
#21 Le 04/10/2013, à 13:25
- blafo
Re : Mes leçons
. Ensuite, chaque fois que tu passes dans la boucle, il suffit de lui ajouter la valeur de loop.
??????????
Toujours grand merci de vos réponses au cas où j'oublierais
Je crains que Stephen King est mort depuis quelques temps déja...
Hors ligne
#22 Le 04/10/2013, à 13:47
- pingouinux
Re : Mes leçons
Il ne faut pas confondre le numéro de la boucle (la variable loop), qui est aussi le numéro du tir réussi, et le nombre total de bonbons gagnés (la variable nombre). Au départ, tu as 0 bonbon, d'où l'initialisation à 0.
Dans la 1ère boucle, nombre augmente de 1
Dans la 2ème boucle, nombre augmente de 2
................................................................................
Dans la 50ème boucle, nombre augmente de 50
Tu remarques donc que dans chaque boucle, nombre augmente du numéro de la boucle, qui est loop
Hors ligne
#23 Le 10/10/2013, à 08:25
- blafo
Re : Mes leçons
Bonjour
Ca n'est surement pas ça mais l'idée est là
tirs = 1
bonbons = 2
for loop in range (50):
print (tirs)
bonbons = bonbons + tirs
print (bonbons)
Toujours grand merci de vos réponses au cas où j'oublierais
Je crains que Stephen King est mort depuis quelques temps déja...
Hors ligne
#24 Le 10/10/2013, à 08:47
- pingouinux
Re : Mes leçons
As-tu essayé ton script ?
Ça ne peut pas marcher, la variable tirs est toujours égale à 1. Et pourquoi initialiser nombre à 2 ?
Pour tester, n'hésite pas à ajouter des impressions dans la boucle, en limitant le nombre de boucles (à 5, par exemple).
Tu peux vérifier le résultat obtenu, car le nombre de bonbons après n tirs est la somme des n premiers nombres entiers, soit n*(n+1)/2.
Ce qui donne :
15 pour n=5
1275 pour n=50
Hors ligne
#25 Le 11/10/2013, à 10:33
- blafo
Re : Mes leçons
Bonjour
Pingoinlinux. Désolé, mais je vais te demander la réponse. En effet, je ne vois pas du tout comment faire.
Tout d'abord, est que la réponse peut être dans cet exemple
a = 7
b = 10
i = a + 1
p = a
for loop in range(b-a):
p = p * i
i = i + 1
print p
Dernière modification par blafo (Le 11/10/2013, à 10:39)
Toujours grand merci de vos réponses au cas où j'oublierais
Je crains que Stephen King est mort depuis quelques temps déja...
Hors ligne