Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

Répondre

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
quarantetrois moins dix-neuf
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Retour

Résumé de la discussion (messages les plus récents en premier)

yoshi
04-10-2009 12:58:13

'lut,

Je t'ai proposé d'afficher les 10 premiers nombres impairs ainsi :

for i in xrange(1,20,2):
    print i

La même chose avec une boucle while :

i=1
while i<20:
    print i,
    i+=2

--------------------------------------------------------------
Je t'avais aussi donné ce code qui affiche 3 colonnes le nombre de nombres impairs, les nombres impairs, leur somme :

S=0
for i in range(10):
    S+=2*i+1
    print i+1,"  ",2*i+1,'  ',S

La même chose avec while :

i,S=0,0
while i<10:
    S+=2*i+1
    print i+1,"  ",2*i+1,'  ',S
    i+=1

--------------------------------------------------------------------------------------------------------
Et encore après ton post/question sur ton script de combinaison et le message d'erreur, je t'avais proposé :

list=[]
for i in xrange(10):
    for j in xrange(10):
        a = i,j
        print a
        list.append(a)
print list

La même chose avec while :

list,i,j=[],0,0
while i<10:
    while j <10:
        a = i,j
        print a
        list.append(a)
        j+=1
    j=0
    i+=1
print list

Tu es obligé de gérer toi-même les compteurs j = j + 1 et i = i + 1
Et tu ne dois pas non plus oublier de remettre à zéro le compteur j, lorsque tu sors de la boucle...

Est-ce que ça t'éclaire plus cette fois ?

@+

Lutcho74
03-10-2009 22:08:15

Re,

Ce que tu vient de m'expliquer je l'ai lu à mainte reprise (mis à par le truc sur xrange) mais le problème c'est que j'ai toujours fait avec les boucles while...je pense qu'il va falloir que je fasse se que tu m'a conseillé cet a dire faire différents tests du style les nombres paires, impaires et approfondir...
Merci pour la précision du xrange :-) je l'ignorai totalement...

@+

yoshi
03-10-2009 18:16:24

Salut,

Alors une boucle...
Deux exemples :

list=['A',1,2,'toto',1024]
for a in list:
    print a

donne :
A
1
2
toto
1024
Ca, c'est une boucle sur liste que tu as fait toi...

S=0
for i in range(10):
    S+=2*i+1
    print i+1,"  ",2*i+1,'  ',S

Résultat :
1    1    1
2    3    4
3    5    9
4    7    16
5    9    25
6    11    36
7    13    49
8    15    64
9    17    81
10    19    100

La première colonne compte le nombre de tours de la boucle : correspond au nombre i +1. Puisque i+1 va de 1 à 10, c'est que i va de 0 à 9. Donc quand tu demandes range(10) tu fabriques la liste des 10 premiers nombres entiers de 0 à 9, puis tu pioches l'un après l'autre tous les nombres de la liste.

La deuxième colonne affiche les 10 premiers nombres impairs.

La troisième colonne affiche la somme S des (i+1) premiers nombres impairs pour i de 0 9 :
un nombre impair   S = 1,
deux nombres impairs S = 1 + 3 = 4
trois nombres impairs S = 1 + 3 + 5 = 9

Maintenant, normalement, si je te dis : trouve-moi la somme des 50 premiers nombres impairs, tu dois pouvoir donner la réponse en 2 s... Non ?

Peut-être as-tu constaté que je n'utilisais plus range mais xrange... Qu'est-ce que ça change ?
Pas grand chose et beaucoup à la fois :
En mode console tu tapes :

>>> range(10)

et tu obtiens [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], une liste ! la liste des 10 premiers nombres entiers.
et si tu tapes xrange(10) tu obtiens... rien !
xrange ne construit pas de liste, on va dire, pour simplifier que c'est un compteur qui ne fonctionne qu'avec "autre chose".

>>> for i in xrange(10):
    print i,

te renvoie 0 1 2 3 4 5 6 7 8 9...
Mais il a fabriqué ces nombres à la demande l'un après l'autre... IL n'a pas construit une liste d'abord, puis pioché les nombres dans la liste...  Donc xrange pour de très grandes quantités, consomme moins de mémoire, est plus rapide.

Encore un petit raffinement pour les boucles : tu n'es pas obligé de commencer à 0, et tu n'es pas obligé de prendre les nombres l'un après l'autre, tu peux les prendre de 2 en 2, de 3 en 3...
Exemple pour afficher les 10 premiers nombres impairs, je vais commencer à 1, aller de 2 en 2, jusqu'à 19, et dire à la boucle
- que tu commences à 1
- que tu vas jusqu'à 20 (et elle s'arrêtera à 19, donc)
- que tu veux avoir les nombres de 2 en 2.
Voilà ce que ça donne :

for i in xrange(1,20,2):
    print i,

Affichage   
1 3 5 7 9 11 13 15 17 19

C'est plus clair ? Fais des essais avec les boucles... C'est comme ça que tu avanceras.

@+

Lutcho74
03-10-2009 16:41:17

Salut,

A ok...

Y a vraiment rien à faire, je n'arrive pas à utilisé cette boucle (for) dans les programmes que je fait -_-' et pourtant j'ai lu des docs sur ça simplicité à faire tel ou tel chose mais j'arrive pas à m'en servir...

En tout cas merci beaucoup pour ce code :-)

@+

yoshi
26-09-2009 18:45:27

Bonsoir,


Ne jamais oublier : tu pars de 0 et non de 1, donc de 0 à 10, cela te fait 11 éléments et non 10.
Dans ton script, si e ne dépasse pas 9, b lui arrive jusqu'à 10 et donc tu essaies d'accéder au 11e de ta liste...
Ce qui foire !
As-tu une raison particulière de procéder ainsi ?
Parce que je te propose :

list=[]
for i in xrange(10):
    for j in xrange(10):
        a = i,j
        print a
        list.append(a)
print list

En prime je conserve la liste de tes tuples (en français, ici couples) dans la liste nommée list.

@+

Lutcho74
26-09-2009 16:59:06

Bonjour,

Cette après midi je me suis lancé dans un programme permettant de donner toutes les combinaisons possible avec 2 champs et comme caractères seulement les chiffres (0,1,2,3,4...9) ...j'ai "réussi" à faire le programme et il me donne les 100 combinaisons possible mais, il me met un erreur à la fin de l'exécution et je ne comprend pas pourquoi elle est là...

Pour le code :

lst=[0,1,2,3,4,5,6,7,8,9]

f,e,c,b=0,0,0,0

g=10

while e!=g:
    a=lst[e],lst[b]
    e+=1
    c+=1
    if c==10:
        b+=1
        c=0
    print a
    if e>9:
        e=0

Pour l'erreur :

Traceback (most recent call last):
  File "C:/Documents and Settings/Compaq_Propriétaire/Bureau/mon site/Programmation/test_combi_01.py", line 8, in <module>
    a=lst[e],lst[b]
IndexError: list index out of range

Merci d'avance pour votre aide.

Pied de page des forums