【发布时间】:2020-08-05 13:31:17
【问题描述】:
应该返回的值是有效的!!!! 上面的 print(self.affichage) 表明它有效!!!! 为什么不退货??? (最后一次回归)
所以这段代码是一个波兰反向表示法演算: 你从左到右读取,数字存储在一堆中,操作数适用于该堆的高两个数字(最近的两个)
# here comes the actual code :
class Calculatrice():
# création de la mémoire de la calculatrice
def __init__(self):
self.pile = []
self.affichage = []
def traitement(self,element):
# opérateur
if element in "+-*/":
# on vérifie qu'il y a les nombres suffisants pour effectuer ces opérations
if len(self.pile) > 1:
# addition
if element == "+":
resultat = self.pile[-2] + self.pile[-1]
# soustraction
elif element == "-":
resultat = self.pile[-2] - self.pile[-1]
# multiplication
elif element == "*":
resultat = self.pile[-2] * self.pile[-1]
# division
elif element == "/":
resultat = self.pile[-2] / self.pile[-1]
# ATTENTION : dans les cas de ces opérations, seuls deux nombres sont nécessaire,
# donc on peut généraliser les deux actions suivantes, mais ça ne devrait pas forcément être le cas.
# on dépile les nombres traités
del self.pile[len(self.pile)-2:]
# on empile le résultat
self.pile.append(resultat)
return True
elif len(self.pile) == 1:
if element == "*":
# erreur : pas assez de nombres pour effectuer une multiplication
print("Erreur 03 : Pas assez de nombres pour effectuer la multiplication.")
return False
elif element == "/":
# erreur : pas assez de nombres pour effectuer une division
print("Erreur 04 : Pas assez de nombres pour effectuer la division.")
return False
# si c'est une addition, on considère qu'on ajoute le nombre à 0, donc la pile ne change pas
else:
# si c'est une soustraction, on empile son opposé à la place du nombre
if element == "-":
self.pile[-1] = (self.pile[-1] * (-1))
return True
# la taille de la pile = 0, c-à-d. qu'aucun nombre n'a été stocké au préalable
else:
print("Erreur 02 : Pas assez de nombres pour effectuer une opération.")
return False
else:
for car in element:
if car not in "0123456789.":
# erreur : caractère non reconnu
print("Erreur 01 : La commande n'a pas été comprise.")
return False
# si on est arrivé jusqu'ici, on va considérer que c'est bon et que c'est un nombre
# on empile l'élément
self.pile.append(float(element))
return True
def npi(self,chaine):
# si la récurrence n'est pas à sa limite
if len(chaine) != 0:
# on vérifie qu'il y a des espaces
if " " in chaine:
# on parcourt la chaine jusqu'à l'espace suivant
i = 0
temp = ""
while chaine[i] != " ":
temp = temp+chaine[i]
i += 1
# on a fini d'extraire cet élément : on le traite.
traitement = self.traitement(temp)
# si il y a eu des erreurs de traitement : on arrête tout.
if traitement == False:
return ["Erreur"]
else:
# on continue de traiter le reste de la chaîne
self.npi(chaine[i+1:])
else:
# il n'y a pas d'espace, donc il n'y a qu'un seul élément : on le traite.
traitement = self.traitement(chaine)
# si il y a eu des erreurs de traitement : on arrête tout.
if traitement == False:
return ["Erreur"]
# on a fini, on sort du if
self.npi("")
else:
# la chaîne est vide : tous les éléments ont été traités. On renvoie le résultat final et on réinitialise la pile.
self.affichage = self.pile.pop()
print(self.affichage)
return self.affichage
c = Calculatrice()
print(c.npi("2 3 + 4 -"))
# doit retourner 1
【问题讨论】:
-
不返回是什么意思?你希望它做什么?
-
对不起@SuperStew 我没有看到你的评论,但现在已经解决了!我希望它返回一个列表(self.affichage)
标签: python return return-value nonetype