hershel Posté(e) le 5 mai 2022 Signaler Share Posté(e) le 5 mai 2022 Bonsoir j'ai actuellement un petit problème avec un programme python. En effet il nous est demander de savoir ecrire le code d'un tri par selection du maximum mais peu importent mes effort je ne trouve aucunes pistes sur internet et mon programme refuse de me donner un tableau trié a la fin. Je ne comprend pas exactement ou j'ai bien pu me tromper et quels sont les point problematiques. Voici mon programme : for i in range(0,len(tab)-1,-1): | if tab[0]>tab[i]: | | tab[i],tab[0]=tab[0],tab[i] print(tab) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
E-Bahut Denis CAMUS Posté(e) le 5 mai 2022 E-Bahut Signaler Share Posté(e) le 5 mai 2022 Bonsoir, Ta ligne : tab[i],tab[0]=tab[0],tab[i] sauf erreur peut se décomposer en : tab[i]]=tab[0] ; 0 pour les deux tab[0]=tab[i] ; Comme tu viens de copier tab[0] dans tab[i], tab[0] ne prend pas l'ex valeur de tab[i] et tu te retrouves avec la valeur tab[0] des deux côtés. Tu dois passer par une variable intermédiaire pour ne pas perdre la valeur tab[i] ________________________________________________________________________ https://zestedesavoir.com/billets/3707/permuter-deux-variables-sans-en-utiliser-une-troisieme/ Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
E-Bahut julesx Posté(e) le 6 mai 2022 E-Bahut Signaler Share Posté(e) le 6 mai 2022 Bonjour, Je ne pense pas que l'erreur est dans l'instruction tab[i],tab[0]=tab[0],tab[i] qui permute effectivement les deux valeurs sans perte. Là où ça coince, c'est ici for i in range(0,len(tab)-1,-1): Si on veut un range décroissant, la première valeur doit être le maximum, pas le minimum, donc écrire for i in range(len(tab)-1,0,-1): Mais... Le script tel qu'il est écrit permute simple la valeur initiale du tableau avec la première valeur plus petite trouvée en commençant par la fin. En adaptant un algorithme de tri par sélection du minimum trouvé sur la toile, j'ai obtenu le script ci-dessous, qui semble fonctionner. A vérifier cependant. J'ai mis en tête un générateur aléatoire de tableau, ce qui permet de faire des essais répétitifs. import random L0=[] for i in range(0,50): n=random.randint(1,1000) while n in L0: n=random.randint(1,1000) L0.append(n) tab=L0[0:15] print(tab) for i in range(len(tab)-1,0,-1): ind_max=i for j in range (i-1,-1,-1): if tab[j]>tab[ind_max]: ind_max=j tab[i],tab[ind_max]=tab[ind_max],tab[i] print(tab) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
E-Bahut Denis CAMUS Posté(e) le 6 mai 2022 E-Bahut Signaler Share Posté(e) le 6 mai 2022 Exact, j'avais fait de tête et pas testé par programme. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
E-Bahut julesx Posté(e) le 6 mai 2022 E-Bahut Signaler Share Posté(e) le 6 mai 2022 Bonsoir Denis, J'espère quand même que hershel va revenir car sinon, comme trop souvent, on se sera cassé la tête pour rien, sauf à en apprendre un peu plus sur Python. A ce propos, j'avais bien compris que for i in range(1,10) s'arrêtait à i=9 (seul Python sait pourquoi) mais je n'avais pas percuté que, dans l'autre sens, for i in range (10,0,-1) s’arrêterait à i=1 . Dans l'optique de Python, c'est logique, on s'arrête à l'avant dernier terme, mais c'est quand même troublant. En passant, ça explique que, dans mon script, on a for j in range (i-1,-1,-1) alors qu'il n'y a évidemment aucun terme d'indice -1 dans la liste. Avec les "vieux" basic ou pascal, on n'avait pas ces problèmes, mais on a voulu changer (en mieux, faudrait qu'on me le justifie, dans les précédents, par exemple, les Begin End permettaient de parfaitement délimiter les sous-éléments alors que là, il faut jongler avec les indentations). Bon week-end. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
E-Bahut Denis CAMUS Posté(e) le 6 mai 2022 E-Bahut Signaler Share Posté(e) le 6 mai 2022 Bonsoir Jules, Oui c'est un peu désarçonnant au début les indentations. Et ce qui va de paire, les "deux points" au bout de la ligne. Je ne sais pas ce que tu utilises comme IDE. Moi cest Thonny. La coloration syntaxique aide un peu et surtout la coloration "fautedesyntaxique" en cas d'oubli des "deux points", des guillemets, des crochets ou de parenthèses. Je ne suis pas très doué en Python. Heureusement qu'il y a le Net car j'en fais par périodes puis lorsque j'arrête, à la période suivante j'ai oublié pas mal de choses. Je suis obligé de taper le nom de l'instruction que je cherche à utiliser, ou bien décrire ce que je veux faire pour obtenir le nom de l'instruction. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
E-Bahut julesx Posté(e) le 7 mai 2022 E-Bahut Signaler Share Posté(e) le 7 mai 2022 Bonjour Denis, J'utilise également Thonny car ce qui m'a plus, c'est la possibilité d'avoir en plein écran et en côte à côte la partie programmation et la partie console. De plus, l'effaçage de la console par un simple clic n'est pas négligeable non plus. J'aurais bien aimé en plus avoir le possibilité d'effacer la console par une instruction en début de script mais j'ai beau chercher, je ne trouve pas l'information sur la toile. Sinon, je fais aussi beaucoup comme toi pour les instructions, en particulier parce que je ne mémorise plus autant qu'avant les différentes syntaxes ou les possibilités des instructions que je suis amené à utiliser. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
E-Bahut Denis CAMUS Posté(e) le 7 mai 2022 E-Bahut Signaler Share Posté(e) le 7 mai 2022 Sacré Aloïs ! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
E-Bahut julesx Posté(e) le 7 mai 2022 E-Bahut Signaler Share Posté(e) le 7 mai 2022 il y a 20 minutes, Denis CAMUS a dit : Sacré Aloïs ! J'espère qu'on en est encore loin ! Mais si ça se trouve, le "tsar" va résoudre définitivement ce problème (et tous les autres) le 9 mai. P.S. : hershel est venu sur le site il y a 13 h ? Si c'est le cas, ça aurait été sympa qu'il se manifeste. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
E-Bahut Denis CAMUS Posté(e) le 7 mai 2022 E-Bahut Signaler Share Posté(e) le 7 mai 2022 Il y a 4 heures, julesx a dit : J'aurais bien aimé en plus avoir le possibilité d'effacer la console par une instruction en début de script mais j'ai beau chercher, je ne trouve pas l'information sur la toile. C'est réclamé par pas mal de personnes et l'auteur dit que ce n'est pas évident à implémenter. Mais c'est dans les "à faire plus tard" : https://groups.google.com/g/thonny/c/rwHElFfKYr0/m/y9i5bJm0AAAJ Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
E-Bahut julesx Posté(e) le 7 mai 2022 E-Bahut Signaler Share Posté(e) le 7 mai 2022 Donc, wait and see. Merci pour l'info. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.