J'ai créé un programme qui résout une fonction avec des paramètres. Nous entrons d'abord nos valeurs et utilisons une méthode if pour donner la valeur de l'objet à s . Après cela, nous devons le donner à notre instruction z = 1 - s et afficher le résultat. Je vais mettre une image avec ma fonction. Le problème est que mon programme ne peut pas voir s objet. z = 1 - s NameError: name 's' is not defined . Que devrais-je faire? 
import math
x, l, r, a, c = float(input('x: ')), float(input('l: ')), float(input('r: ')), float(input('a: ')),
float(input('c: '))
if x <= 1:
s = 0
elif l < x < (l + r) / 2:
s = 2 * math.pow(( x - l) / (r - l), 2)
elif x > r:
s = 1
elif (l + r) / 2 < x <= r:
s = 1 - 2 * math.pow((r - x) / (r - l), 2)
z = 1 - s
if x <= c:
print(s)
elif x > c:
print(z)
4 Réponses :
Apparemment, il y a des cas qui ne donnent la valeur True dans aucune des quatre instructions if.
En particulier, je pense que la première déclaration if est fausse, au lieu de <= 1 l'image semble indiquer <= l .
Bonne prise avec le 1 vs l . Preuve supplémentaire que c'est presque toujours une mauvaise idée d'utiliser l comme variable
Le if / elif / elif déclaration n'a pas d' else clause; si aucune des conditions ne correspond, aucune des branches ne sera prise.
Pour voir si c'est un problème, ajoutez une clause else (peut-être une clause simple pour signaler une erreur).
Dans votre première condition, vous écrivez x <= 1 (eks inférieur ou égal à un), mais je pense que la formule est x <= l (eks inférieur ou égal à ell).
Essayez-le comme ceci:
if x <= l: # changed 1 to l
s = 0
elif l < x < (l + r) / 2:
s = 2 * math.pow(( x - l) / (r - l), 2)
elif x > r:
s = 1
elif (l + r) / 2 < x <= r:
s = 1 - 2 * math.pow((r - x) / (r - l), 2)
else: # added else clause
raise ValueError(f"Unexpected values: x={x}, l={l}, r={r}")
s est créé dans les blocs conditionnels. Si s n'existe pas après votre premier bloc de clauses if , alors aucune de ses conditions évaluée à vrai et par la suite s n'a été initialisée.
Soit ajouter une else déclaration à la fin du premier if le bloc ou assurez - vous que votre entrée toujours conduit à l' un des if / elif conditions correspondant.
s est défini dans la première boucle conditionnelle, donc s'il n'est pas défini, c'est parce que l'algorithme n'a pas trouvé de condition vraie. Sur la base de la boucle actuelle, si x> 1 & x <l, alors s n'est pas défini.
Aussi si x> r alors s n'est pas défini.
définir la variable s comme vide au démarrage, il n'y a pas de s dans la portée de départ, donc les s disponibles localement ne sont pas disponibles En dehors de la portée !! Ecrire au début du code s = 0
Votre construction
if ... elifmanque d'unelseà la fin. Etes-vous sûr que vos cas sont exhaustifs?Si
sn'a pas été défini, cela signifie qu'aucun de vosifelifouelifn'est évalué àTrue. Essayez d'utiliser un débogueur pour confirmer que vos calculs (à la main) correspondent à ceux que vous avez codés.Je le parcourirais pour voir la sortie de chaque variable. Ma première pensée est que
sest indéfini car il est local à chaque instruction if. J'utiliserais au moins des méthodes. Essayez de définirS = 0au début de votre logique.La formule dit
x <= l, pasx <= 1comme dans votre code.@Agent_Orange, @Paul_Jay - la portée est bonne; en Python,
ifles blocs ne présentent pas leur propre portée, doncsseront disponibles à l' extérieur, à condition au moins un desif/elifconditions assorties (ou il y avait uneelseclause qui a également définis).@sabik bien, de nouvelles connaissances tous les jours, merci d'avoir clarifié