compréhension de qlqs fonctions en Python

Messages : 0

Inscription : 28 mai 2019 13:36

Profil de l'utilisateur : Élève de lycée

compréhension de qlqs fonctions en Python

Message par Porus » 06 août 2020 20:20

Bonjour,
je revois le cours d'IPT de PCSI pour préparer la PSI à la rentrée.
Le chapitre sur les boucles for et les test if contient plusieurs exemples que je comprends pas totalement, j'ai un niveau faible, si vous pouviez donc m'aider dessus :oops:


--

Code : Tout sélectionner

#Exemple5
def max(l):
	m=l[0]
	imax=0
	for i in range (len(l)):
		if m<l[i]:
			m=l[i]
			imax=i
			return[imax,m]


c'est donc une fonctionqui prend en argument une liste l et qui donc la position et la valeur du 1er maximum de cette liste
ma prof a fait un tableau d'avancement pour cette fonction appliquée à [4,3,5,1,5] :
pour i=0, elle donne le tableau suivant : https://www.casimages.com/i/200806080918851301.png.html

pour i=0 c'est ok puisque on initialise à l[0]=4
mais pour i=1, on a l[1]=3<m donc ça veut dire que le programme ne verra pas les instructions du test if puisque la condition donnera False,
je vois pas pourquoi ma prof a décidé de garder max et imax aux mêmes valeur que i=0
pour moi on devrait rien mettre dans les cases i=1 :|



-- autre exemple :

Code : Tout sélectionner

#Exemple6

def suite(n):
    u=1
    l=[u]
    for i in range(1,n+1):
        u=2*u+1
        l.append(u)
    return l
x=[n for n in range(11)]
y=suite(10)
plt.plot(x,y,'xk')
plt.show()
on trace la suite U

alors ici le compteur i de la boucle for n'intervient pas dans les instruction qui suivent la boucle for ! comment ça se fait ça ?? on a un compteur qui n'intervient même pas dans les instructions... ça me parait bizarre pcq cmt Python peut savoir s'il doit avancer d'un rang à chaque fois si le compteur n'intervient pas pour le dire...
j'aurais écrit qlqc comme :

Code : Tout sélectionner


def suite(n):
    u[0]=1
    l=[u]
    for i in range(1,n+1):
        u[i]=2*u+1
        u=u[i]
        l.append(u)
    return l
x=[n for n in range(11)]
y=suite(10)
plt.plot(x,y,'xk')
plt.show()
après j'avoue c'est bizarre pcq u fait penser à une liste..


merci de votre aide
Dernière modification par Porus le 10 août 2020 14:55, modifié 3 fois.

Messages : 153

Inscription : 18 févr. 2020 14:42

Profil de l'utilisateur : Parent

Re: compréhension de qlqs fonctions en Python

Message par Feedback » 06 août 2020 20:54

Python, c'est vraiment de la merde. Je ne comprends pas que l'on enseigne l'info avec un langage qui ne soit pas fortement typé et aussi peu lisible. Enfin bref..
Ton tableau d'avancement donne la valeur des 2 variables à chaque itération.

Une boucle sert à itérer un certain nombre de fois le bloc d'instruction.
Il n'y a aucune nécessité à utiliser la variable servant au comptage de ta boucle dans le bloc d'instruction.

Il faut que tu vois la variable u comme une boite dans lequel on range des choses et dont on peut connaitre son contenu en l'ouvrant.
"u =" signifie je range quelque chose dans la boite de nom u.
"2*u + 1" est une expression calculatoire qui signifie je prends le contenu de la boite u, je le multiplie par 2 et j'ajoute 1.

Essaie de construire le tableau d'avancement de cette boucle sur 5 itérations.
Tu devrais mieux comprendre.

u est une variable, pas une liste.

Messages : 9679

Inscription : 30 juil. 2008 16:59

Profil de l'utilisateur : Élève de lycée

Re: compréhension de qlqs fonctions en Python

Message par fakbill » 07 août 2020 10:08

Feedback : ton avis est contraire à une large partie de la communauté scientifique qui utilise python et les lib qui vont bien pour faire efficacement leur travail. Python fait du duck typing et oui ça résout nombre de problèmes posés par le typage fort. Ca en pose bien sûr d'autres.

Porus:
C'est quoi cette merde??
def max(l):
max=l[0]

Tu ne peux pas donner le même nom à une fonction et au résultat qu'elle renvoie!! La fonction c'est une recette de cuisine. La recette renvoie le gâteau (le résultat) et pas la recette elle même!!


Il y a deux choses à reprendre depuis le début.
1) penser les algo en français comme si tu étais la machine.
Je te donne une liste et je te demande une recette qui marche à tous les coups et qui me donne le max de cette liste et l'indice où ce max se trouve. Tu fais comment. Explique moi ça en français.

2) Le minimum vital de syntaxe python. Comprendre ce qu'est une variable.
Quand tu fais a=1 et b=a que ce passe t il ? Ensuite comprendre les tests et les boucles et les objets de base : les srt; les list; et les tuples.

Une fois que tu sera clair avec 1) et 2), tu verras que c'est tout simple.
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Messages : 9679

Inscription : 30 juil. 2008 16:59

Profil de l'utilisateur : Élève de lycée

Re: compréhension de qlqs fonctions en Python

Message par fakbill » 07 août 2020 10:14

"alors ici le compteur i de la boucle for n'intervient pas dans les instruction qui suivent la boucle for ! comment ça se fait ça ?? on a un compteur qui n'intervient même pas dans les instructions... ça me parait bizarre pcq cmt Python peut savoir s'il doit avancer d'un rang à chaque fois si le compteur n'intervient pas pour le dire..."


ha oui...tu n'as rien compris à ce qu'est une boucle :(
le fait de faire for i in range(N) dit à python de faire une boucle. Ca permet de répéter N fois le corps de cette boucle. comment ferais tu sinon?
dans le corps de la boucle, tu as, à disposition, une variable i.Que tu l'utilises ou pas ne change rien au fait que ce soit une boucle.

commence par répondre à mon 1).
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Messages : 0

Inscription : 28 mai 2019 13:36

Profil de l'utilisateur : Élève de lycée

Re: compréhension de qlqs fonctions en Python

Message par Porus » 07 août 2020 10:46

fakbill a écrit :
07 août 2020 10:08

Porus:
C'est quoi cette merde??
def max(l):
max=l[0]
au temps pour moi :lol:
fakbill a écrit :
07 août 2020 10:08

1) penser les algo en français comme si tu étais la machine.
Je te donne une liste et je te demande une recette qui marche à tous les coups et qui me donne le max de cette liste et l'indice où ce max se trouve. Tu fais comment. Explique moi ça en français.
eh bien je vais voir le 1er élément de cette liste que je note à part, ensuite je regarde 2eme de cette liste et regarde si le 2eme est plus grand que le 1er, si c'est le cas alors je note la valeur du 2eme élément à part et en même temps je note 2 à côté pour avoir la position... et je fais ça autant de fois qu'il y a d'éléments dans la liste.
fakbill a écrit :
07 août 2020 10:08

2) Le minimum vital de syntaxe python. Comprendre ce qu'est une variable.
Quand tu fais a=1 et b=a que ce passe t il ? Ensuite comprendre les tests et les boucles et les objets de base : les srt; les list; et les tuples.
en utilisant l'analogie de Feedback, a est un boîte dans laquelle je range le chiffre 1, et b est une boîte dans laquelle je range une autre boîte notée a, donc b=1 ? :oops:

fakbill a écrit :
07 août 2020 10:14

dans le corps de la boucle, tu as, à disposition, une variable i.Que tu l'utilises ou pas ne change rien au fait que ce soit une boucle.
alors à quoi ça sert d'avoir une variable i qu'on n'utilise pas par la suite ? c'est purement une question de syntaxe liée à Python ?

ps: fakbill, tu vois j’exagérais pas en disant que j'étais une brèle dans cette matière :mrgreen:

Messages : 9679

Inscription : 30 juil. 2008 16:59

Profil de l'utilisateur : Élève de lycée

Re: compréhension de qlqs fonctions en Python

Message par fakbill » 07 août 2020 11:45

non ce n'est pas si mal :)
alors à quoi ça sert d'avoir une variable i qu'on n'utilise pas par la suite ? c'est purement une question de syntaxe liée à Python ?
Oui. D'ailleurs certains écrivent "for _ in ragne(N)" pour dire qu'ils se fichent de la variable de boucle. Tout ce qu'ils veulent c'est "répéter N fois un bout de code".
'_' dit à l'interpréteur python qu'on ne veut pas s'encombrer d'une variable de boucle. En prépa, ne t'occupe pas de ça. C'est plus de l'ordre de l'esthétisme.
Ca ne te sert à rien d'avoir cette variable mais en quoi ça te gène?? Quand tu code, tu as souvent plein de variables à disposition et tu n'utilises pas tout tout le temps.
eh bien je vais voir le 1er élément de cette liste que je note à part, ensuite je regarde 2eme de cette liste et regarde si le 2eme est plus grand que le 1er, si c'est le cas alors je note la valeur du 2eme élément à part et en même temps je note 2 à côté pour avoir la position... et je fais ça autant de fois qu'il y a d'éléments dans la liste.
oui c'est ça! reste donc à le coder.
en utilisant l'analogie de Feedback, a est un boîte dans laquelle je range le chiffre 1, et b est une boîte dans laquelle je range une autre boîte notée a, donc b=1 ? :oops:
Oui :).
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Messages : 0

Inscription : 28 mai 2019 13:36

Profil de l'utilisateur : Élève de lycée

Re: compréhension de qlqs fonctions en Python

Message par Porus » 07 août 2020 12:17

d'ailleurs pour les listes, y a u exemple que je comprends pas trop,
on écrit une fonction recherche qui prend en argument une liste d'entiers et un entier pour voir si cet entier est dans la liste d'entiers.
alors on peut aisément le faire avec une boucle for, mais mon exemple est dans le chapitre sur la boucle while donc on utilise la boucle while pour le faire...
voici le code :

Code : Tout sélectionner

def recherche(l,x):
    i=0
    while i<len(l) and l[i]!=x:  #donc la boucle while va réitérer tant qu'on ne dépasse 
                                                # pas le nombre d'éléments dans la liste et tant que 
                                                # l'entier n'est pas trouvé dans la liste 
        i+=1
    if i==len(l):   #je comprends pas l'usage de ce if, en quoi la condition est 
                         #importante ? fin je vois le lien entre le nombre d'éléments dans la 
                         #liste 
                         #  et le fait que l'élément numéro i de la liste soit égal au nombre 
                         #  d'éléments dans la liste
        return False
    else:
        return True
        
Dernière modification par Porus le 10 août 2020 14:34, modifié 3 fois.

Messages : 153

Inscription : 18 févr. 2020 14:42

Profil de l'utilisateur : Parent

Re: compréhension de qlqs fonctions en Python

Message par Feedback » 07 août 2020 13:10

Si a la fin de la boucle while, i == len, cela signifie quoi au niveau de la recherche de ton élément ?

Messages : 1

Inscription : 07 déc. 2017 15:48

Profil de l'utilisateur : Élève de lycée

Re: compréhension de qlqs fonctions en Python

Message par Allumer Le Freud » 07 août 2020 14:26

@Porus je pense que tu aurais tout à gagner à désigner un booléen dans recherche(l,x)

Code : Tout sélectionner

def recherche(l,x):
	"""
	fonction qui prend en entrée une liste l et un entier x, et qui
	renvoie en sortie le booléen presence caractéristique de la
	présence de x dans l
	"""
	#initialisation du rang
	rang = 0
	#définition du booléen de sortie
	presence = False
	
	#boucle de recherche
	#tant qu'on n'a pas atteint la fin de la liste (rang = len(l) )
	#et que l'élément de rang "rang" n'est pas trouvé
	while rang < len(l) and l[rang] != x : 
		#on passe à l'élément suivant
        	rang+=1
	
	#fin de la boucle while, on ressort avec "rang" qui a une certaine valeur
	#si la valeur de "rang" est différente de len(l), donc si la boucle while s'est
	   arrêtée en cours de chemin, c'est que l[rang] == x, donc il y a présence
	if rang != len(l) :
		presence = True
		
	#et à la fin tu return la valeur booléenne de "presence"
	return presence
2018-2020 PTSI/PT* Loritz
2020-202x Arts et Métiers + INSTN

Messages : 1

Inscription : 07 déc. 2017 15:48

Profil de l'utilisateur : Élève de lycée

Re: compréhension de qlqs fonctions en Python

Message par Allumer Le Freud » 07 août 2020 14:27

Chose très importante, commente tes codes, que ce soit pour les concours, tes profs, ou les gens qui te liront un jour
2018-2020 PTSI/PT* Loritz
2020-202x Arts et Métiers + INSTN

Répondre