Dies ist der Grund, warum ich diesen Artikel geschrieben habe, aber im Universitäts-Test
Für das Problem. Ich habe viel Zeit in einem Teil gebraucht, also habe ich es für mein eigenes Memo gemacht.
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:
#Es war ein Ärger hier
stk.append(int(i))
else:
b=stk.pop()
a=stk.pop()
stk.append(cal(i,a,b))
print(stk[0])
Eingabebeispiel.txt
1 2 * 3 +
1 2 3 4 - * 5 - +
Während des Tests konnte ich mir eine Methode nicht gut vorstellen, also konnte ich sie nicht nachschlagen. Ich steckte im obigen Kommentar fest.
In umgekehrter polnischer Notation sind Operanden und Zahlen enthalten. Mit anderen Worten muss festgestellt werden, ob es sich um ein Zeichen oder einen Operanden handelt. In der obigen Funktion "isnum" muss bestimmt werden, ob das eingehende Zeichen eine int-Typ-Nummer oder ein Zeichentyp-Operand ist.
Ich konnte den Teil nicht implementieren, ob die Zeichenkette hier in eine Zahl umgewandelt werden kann, und ich konnte schließlich kein Programm schreiben.
Es scheint, dass alles mit isdigit () gelöst werden kann. Wenn Sie isdigit () verwenden, wird zurückgegeben, ob es in den Typ int konvertiert werden kann.
isdigittest.py
word=["1","hato","1.0",""]
for w in word:
print(w + " -> ",end="")
print(w.isdigit())
Ausgabe
out.txt
1 -> True
hato -> False
1.0 -> True
-> False
Es wird bestimmt, ob die Zeichenfolge in einen solchen Integer-Typ umgewandelt werden kann. Damit können Sie alles machen.
Wenn Sie dies tatsächlich verwenden und den obigen Code neu schreiben, sieht es so aus.
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
Ich brauche diesen Teil überhaupt nicht. Wenn Sie isdigit () verwenden, benötigen Sie diese Funktion nicht. Immerhin wurde ich ein Einzeiler. Als ich das obige Programm ausführte, konnte ich die richtige Antwort erhalten.
Antworten.txt
5
-6
Recommended Posts