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

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

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

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

Q&A

解決済

1回答

1286閲覧

電卓 C(clear)ボタンがAC(all clear)と同じ挙動をする

Brot

総合スコア23

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

0グッド

0クリップ

投稿2021/05/14 08:27

現在、電卓にいろいろな機能を追加しようとしている最中です。

Cボタンなんですが、例えば1 + 4 c とボタンを押すとちゃんと1 + となり4が消えるのですが、
1 2 3 c とボタンを押すと全部消えてしまいます。

よろしくお願いします。

環境:Windows10, Python3.8.5

参考: https://blog.narito.ninja/detail/10
https://kagakunomemocho.com/python-calc/

Python

1 2 def calc(self, event): 3 #押されたウィジェットのテキスト部分を表示 4 char = event.widget['text'] 5 6 #最後に押したボタンの内容 7 last = self.exp_list[-1] 8 9 # =ボタンの場合 10 if char == '=': 11 if last in CALC_SYMBOLS: 12 self.exp_list.pop() 13 exp = eval(''.join(self.exp_list)) 14 self.exp_list = [str(exp)] 15 16 # Cボタンの場合 問題点 17 elif char == 'C': 18 if len(self.exp_list) == 1: 19 self.exp_list = ['0'] 20 else: 21 self.exp_list = self.exp_list[:-1] 22 23 # ACボタン 24 elif char == 'AC': 25 self.exp_list = ['0'] 26 27 28 #各演算記号を押した 29 elif char in CALC_SYMBOLS: 30 if last == char == '/': 31 self.exp_list[-1] += '/' 32 elif last == char == '*': 33 self.exp_list[-1] += '*' 34 elif last in CALC_SYMBOLS: 35 self.exp_list[-1] = char 36 else: 37 self.exp_list.append(char) 38 39 #それ以外、数字を押した 40 else: 41 if last == '0': 42 self.exp_list[-1] = char 43 elif last in CALC_SYMBOLS: 44 self.exp_list.append(char) 45 else: 46 self.exp_list[-1] += char 47 48 #リストに格納している式を文字列にし、画面に反映 49 self.display_var.set( 50 ' '.join(self.exp_list) 51 )

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

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

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

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

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

guest

回答1

0

ベストアンサー

「C」は一般的な電卓であると、入力した数値を消すことになると思います。

1,2,3,cの順で入力した場合、123と入力したあとクリアして0と表示される感じでしょうか。

参考サイトには「C」を押すと一文字消去とありますが、実際の動きとしては演算子または数値(例の場合123というまとまり)を1つ消去となっています。

投稿2021/05/14 08:57

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Brot

2021/05/14 09:23

回答ありがとうございます。 そうです!0と表示されます。 1,2,3という数値は要素数3でなく1扱いになってしまうんですね...。これはなぜなんでしょうか?
退会済みユーザー

退会済みユーザー

2021/05/14 09:35

「#それ以外、数字を押した」の一番最後にある、 「self.exp_list[-1] += char」で文字列として結合しているからですね。 1文字1要素にしてしまうと、単体の0と、「10」などの末尾の0が判断が複雑になるからとかですかね。
Brot

2021/05/14 23:08

とてもよくわかりました。 教えていただいたことを踏まえて色々チャレンジしてみようと思います。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問