C'est la raison pour laquelle j'ai écrit cet article, mais dans le test universitaire
Pour le problème. J'ai pris beaucoup de temps dans une partie, donc je l'ai fait pour mon propre mémo.
RPN.py
def isnum():
if int(hoge) == True:
return 1
else:
return 0
def cal(operand,a,b):
if operand == "+":
return int(a)+int(b)
elif operand == "-":
return int(a)-int(b)
elif operand == "*":
return int(a)*int(b)
por=[]
por = list(input().split())
stk=[]
for i in por:
if isnum(i) == int:
#C'était un problème ici
stk.append(int(i))
else:
b=stk.pop()
a=stk.pop()
stk.append(cal(i,a,b))
print(stk[0])
Exemple d'entrée.txt
1 2 * 3 +
1 2 3 4 - * 5 - +
Pendant le test, je ne pouvais pas bien penser à une méthode, donc je ne pouvais pas la rechercher. J'étais coincé dans le commentaire ci-dessus.
En notation polonaise inversée, les opérandes et les nombres sont inclus. En d'autres termes, il est nécessaire de déterminer s'il s'agit d'un caractère ou d'un opérande. Dans la fonction ʻisnum` ci-dessus, il est nécessaire de déterminer si le caractère entrant est un nombre de type int ou un opérande de type caractère.
Je ne pouvais pas implémenter la partie de savoir si la chaîne de caractères pouvait être convertie en un nombre, et je ne pouvais pas écrire un programme après tout.
Il semble que tout peut être résolu en utilisant ʻisdigit () `. Si vous utilisez isdigit (), il retournera s'il peut être converti en type int.
isdigittest.py
word=["1","hato","1.0",""]
for w in word:
print(w + " -> ",end="")
print(w.isdigit())
production
out.txt
1 -> True
hato -> False
1.0 -> True
-> False
Il déterminera si la chaîne de caractères peut être convertie en un type entier comme celui-ci. Vous pouvez tout faire avec ça.
Si vous utilisez réellement ceci et réécrivez le code ci-dessus, il ressemblera à ceci.
RPN2.py
def cal(operand,a,b):
if operand == "+":
return int(a)+int(b)
elif operand == "-":
return int(a)-int(b)
elif operand == "*":
return int(a)*int(b)
por=[]
por = list(input().split())
stk=[]
for i in por:
if i.isdigit() == True:
stk.append(int(i))
else:
b=stk.pop()
a=stk.pop()
stk.append(cal(i,a,b))
print(stk[0])
isnum.py
def isnum():
if int(hoge) == True:
return 1
else:
return 0
Je n'ai pas besoin de cette partie en premier lieu. Si vous utilisez isdigit (), vous n'avez pas besoin de cette fonction. Après tout, je suis devenu un one-liner. Lorsque j'ai exécuté le programme ci-dessus, j'ai pu obtenir la bonne réponse.
Répondre.txt
5
-6
Recommended Posts