###前提・実現したいこと
Pythonは自然言語の解析がシやすいと聞いて、一昨日からPythonの勉強を始めたので出来る限り自然に入力出来る電卓のプログラムを作りました。現在は、、、
- 四則演算のみ
- 正の数のみ扱える
- ()は使えない
- 0除算の対処も一応しました
- 計算式を読み取る
といったことまでは出来るのですが、現段階でどのようなところを改善すれば良いでしょうか?
また、Pythonでの注意点などがあれば教えていただきたいです。
###該当のソースコード
python
1#coding: utf-8 2 3import sys 4form = input().rstrip() 5 6opePluMin = [] #+と-をいれる 7opeProDiv = [] #*と/をいれる 8 9#符号をsearchする 10for target in ['+','-','*','/']: 11 index = -1 12 while True: 13 index = form.find(target, index+1) 14 if index == -1: 15 break 16 if (target=='+' or target=='-'): 17 opePluMin.append(index) 18 if (target=='*' or target=='/'): 19 opeProDiv.append(index) 20 21#並び替える 22opePluMin.sort() 23opeProDiv.sort() 24 25#符号場所一覧 26opeNum = opePluMin+opeProDiv 27opeNum.sort() 28 29#print(opePluMin) 30#print(opeProDiv) 31#print(opeNum) 32 33#データをストック 34data = [] 35j = 0 36for i in range(len(opeNum)): 37 data.append(int(form[j:opeNum[i]])) 38 j = opeNum[i]+1 39data.append(int(form[j:])) 40#print(data) 41 42#乗除算処理 43for i in opeProDiv: 44 #opeNum中のアドレス 45 opeAdd = opeNum.index(i) 46 #実際の演算子 47 sign = form[i] 48 if sign=='*': 49 data[opeAdd] *= data[opeAdd+1] * 1.0 50 elif sign=='/': 51 try: 52 data[opeAdd] /= data[opeAdd+1] * 1.0 53 except ZeroDivisionError: 54 print("ZeroDivisionError!!") 55 exit() 56 del data[opeAdd+1] 57 del opeNum[opeAdd] 58# print(data) 59 60 61#和差処理 62for i in opePluMin: 63 sign = form[i] 64 if sign=='+': 65 data[0] += data[1] 66 elif sign=='-': 67 data[0] -= data[1] 68 del data[1] 69# print(data) 70 71print(">> " + str(data[0])) 72
###試したこと
出来る限りの計算をしてエラーが出ないか確かめました
###補足情報(言語/FW/ツール等のバージョンなど)
言語 Python 3
OS archlinux
回答2件
あなたの回答
tips
プレビュー