質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

701閲覧

逆ポーランド記法のー(マイナス)の使い方

uyu0531

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/07/30 14:05

逆ポーランド記法です。数学よりの質問かもしれません。

python

1s = list(input().split()) 2stack = [] 3 4for i in range(len(s)): 5 if s[i] == '+': 6 stack.append(stack.pop() + stack.pop()) 7 elif s[i] == '-': 8 stack.append(-(stack.pop() - stack.pop())) 9 elif s[i] == '*': 10 stack.append(stack.pop() * stack.pop())> 11 else: 12 stack.append(int(s[i])) 13 14print(stack[-1]) 15```調べてみたところこうなっていました。-を使う際になぜ 16stack.append(**"-"**(stack.pop() - stack.pop())) 17のようにstack.append の後になぜ-がつくのでしょうか。自分の考えだと(2 3 -)と入力したときには(-(2-3))=1のように答えが1になってしまうと思ってしまいます。[ちなみにここで調べました](http://(http://https://qiita.com/maebaru/items/ca3d4c2922defd28d9ab))

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

次のコードを研究してみてください。
p.py

python3

1def calc(words): 2 stack = [] 3 for w in words: 4 # print("[", w, "]") 5 if w.isdigit(): 6 stack.append(int(w)) 7 continue 8 if len(stack) < 2: 9 print("underflow:", w) 10 break 11 12 b, a = stack.pop(), stack.pop() 13 if w == '+': 14 stack.append(a + b) 15 elif w == '-': 16 stack.append(a - b) 17 elif w == '*': 18 stack.append(a * b) 19 else: 20 print("invalid op:", w) 21 if len(stack) == 1: 22 print("answer", stack[0]) 23 else: 24 print("stack", stack) 25 26 27while True: 28 words = list(input().split()) 29 if len(words) == 0: 30 break 31 calc(words)

実行例
イメージ説明

投稿2020/07/31 23:52

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

2 3 -と入力すると、stack.pop() - stack.pop()は、3 - 2になるので、2 - 3になるようにマイナスを付けるのでしょう。
スタックの出し入れを理解できていないのでは?

投稿2020/07/30 14:10

編集2020/07/31 11:35
otn

総合スコア84667

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問