Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/09/2013, à 13: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, à 14: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, à 16: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, à 16: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, à 16:57)

Hors ligne

#5 Le 21/09/2013, à 17: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, à 17: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, à 18: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, à 21:19

tiramiseb

Re : Mes leçons

Salut,

En effet, la correction que tu nous montres est vraiment mal codée... smile

Hors ligne

#9 Le 24/09/2013, à 12: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, à 12: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, à 12: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, à 12:42

tiramiseb

Re : Mes leçons

blafo a écrit :
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

Hors ligne

#12 Le 03/10/2013, à 09: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, à 10: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, à 12: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, à 12: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, à 12:50)

Hors ligne

#16 Le 03/10/2013, à 15: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, à 09: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, à 09: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, à 09:39

pingouinux

Re : Mes leçons

Salut,

blafo #17 a écrit :
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, à 14: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, à 14:25

blafo

Re : Mes leçons

pingouinux a écrit :

. 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, à 14: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, à 09: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, à 09: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, à 11: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, à 11: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