Programmation de fonction

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Répondre
J2M84
Messages : 13
Enregistré le : dim. 16 nov. 2025 11:42

Programmation de fonction

Message par J2M84 » jeu. 11 déc. 2025 17:19

Bonjour.
je ré-apprends à programmer...
J'ai besoin d'un coup de main:
J'ai créé une fonction AouB() qui me permet de faire des choix en fonction de l'appui sur une touche A ou une touche B.
d=1 si A
d=2 si B
d= autre si ni A ni B
t1, t2, t3 sont des tableaux

def AouB(d):
if d==1:
c=1
rep=t1
elif d==2:
c=2
rep=t2
else:
c=0
rep=0

return c
return rep



puis j'appelle la fonction

AouB(d)

print(c)
print(rep)


et j'obtiens:

NameError: name 'c' is not defined

J'ai regardé plusieurs tutos et cours, je ne comprends pas où est mon erreur.
Merci de m'expliquer
Cdlt

domi
Administrateur
Messages : 3279
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: Programmation de fonction

Message par domi » jeu. 11 déc. 2025 20:35

Bonjour,

Dans un premier temps je déplace le sujet qui n'a rien a faire dans la rubrique "Débutant".
Deuxièmement, c'est quel langage ? Python je suppose ?
dans ce cas mettre l'indentation sinon le code est illisible.
Et sans étudier le script, une chose me choque, pourquoi 2 "return" l'un derrière l'autre ?
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.

J2M84
Messages : 13
Enregistré le : dim. 16 nov. 2025 11:42

Re: Programmation de fonction

Message par J2M84 » jeu. 11 déc. 2025 22:29

Bonsoir.
Merci de ta réponse.
Oui, j'utilise "Thonny" fourni avec l'installation.
J'ai mis 2 return car je n'ai pas réussi à concaténer les deux
Quant à l'indentation, il me semble l'avoir respectée.
Si, avant de sortir de ma fonction, je mets des prints, les résultats sont ceux attendus.
Ce que je ne maîtrise pas ou ne comprends pas, c'est l'usage des return pour récupérer mes données.
Le debug me dit que les dites-variables ne sont pas déclarées alors qu'elles fonctionnent bien dans la fonction.
Ça a l'air tout bête mais j'y ai passé ma journée.
PS: j'ai mis le post dans "Débutant", car c'est mon cas en programmation, utilisation des Gpio , etc, sur PI 3 B+.
Bonne soirée. Merci

mike913
Raspinaute
Messages : 255
Enregistré le : mar. 7 oct. 2014 09:46
Localisation : Morsang / Orge - Essonne
Contact :

Re: Programmation de fonction

Message par mike913 » ven. 12 déc. 2025 07:56

Bonjour,
pour citer du code il faut utiliser les balises:
voici un exemple:

Code : Tout sélectionner

#!<Ton environnement>python3
# coding=UTF-8
# ----------------------------------------------------------------------------
# Import des librairie
# ----------------------------------------------------------------------------
import sys
	etc ...
# ----------------------------------------------------------------------------
# Déclaration des constantes
# ----------------------------------------------------------------------------
 Tes CONSTANTESrep
# ----------------------------------------------------------------------------
# Déclaration des Variables Globaleq
# déclaration de rep ici ou dans la fonction elle même
# ----------------------------------------------------------------------------
rep = [] 
#=================================	
# puis j'appelle la fonction
#	d=1 si A
#	d=2 si B
#	d= autre si ni A ni B
#	t1, t2, t3 sont des tableaux
#=================================
def AouB(d):
	global rep 	# si tu ne l'as pas déclarer dans les variables globales
	if d==1:
	c=1
	rep=t1
	elif d==2:
		c=2
		rep=t2
	else:
		c=0
		rep=0
	return c
	# return rep
#=================================	
# puis j'appelle la fonction
#=================================
def main():
	R=AouB(d)
	print(R)
	print(res)
# ----------------------------------------------------------------------------
# début du script
# ----------------------------------------------------------------------------
if __name__ == "__main__":
	main()
DS712+ 2x Western Digital WD10EADS-00L 1000 GB (SHR) - Firmware: DSM 6.1.6-15266
Raspberry - RFXTRX433 - Aeon Labs ZStick V2 - Domoticz
FreeBox v6
https://meteo.folcke.net
https://wiki.folcke.net

J2M84
Messages : 13
Enregistré le : dim. 16 nov. 2025 11:42

Re: Programmation de fonction

Message par J2M84 » ven. 12 déc. 2025 11:01

Merci des explications:
Les variables sont maintenant reconnues en global.

Tout fonctionne comme attendu.

Grand merci, l'ami!

Bonne journée

MSG
Raspinaute
Messages : 120
Enregistré le : ven. 26 déc. 2014 18:31

Re: Programmation de fonction

Message par MSG » lun. 15 déc. 2025 18:07

Bonjour ,

Sans déclarer de valeur globale , on peut récupérer plusieurs valeur d'une fonction sur un seul "return"

ex:
Fichiers joints
Exemple_Return.PNG
Exemple_Return.PNG (7.9 Kio) Vu 84 fois

Bud Spencer
Modérateur
Messages : 1098
Enregistré le : lun. 15 août 2016 21:38

Re: Programmation de fonction

Message par Bud Spencer » mar. 16 déc. 2025 18:38

Code : Tout sélectionner


def aoub(d):
    t0 = ['x','x']
    t1 = ['a','b','c','e']
    t2= ['f','g','h']

    c = d if d in [1,2] else 0
    res = t0 if c == 0 else t1 if c == 1 else t2    
    
    return c, res

x = 1
r = aoub(x)   
print ("c : " + str(r[0]))
print ("res : " + str(r[1]))

Eviter autant que possible les variables global sauf si ce sont des constantes
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Répondre

Retourner vers « Python »