codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#!C:\Python32\python.exe # -*- coding: utf-8 -*- # Copyright (C) 2011 k. shirakami @ facebook. com All Rights Reserved. class 演算器: def __init__(self): self.基数 = 10 self.御破算() def 御破算(self): self.入力値 = 0 self.演算値 = 0 self.演算スタック = [] self.二項演算子入力 = self.二項演算子記憶 return self.演算値 def 数値入力(self, 数値): self.演算値 = 数値 self.入力値 = 数値 self.二項演算子入力 = self.二項演算子記憶 return self.演算値 def 単項演算子入力(self, 単項演算子): self.演算値 = 単項演算子.演算(self.演算値) self.入力値 = 0 self.二項演算子入力 = self.二項演算子記憶 return self.演算値 def 二項演算子記憶(self, 二項演算子): self.演算値 = 二項演算子.記憶(self.演算値, self.演算スタック) self.入力値 = 0 self.二項演算子入力 = self.二項演算子入替 return self.演算値 def 二項演算子入替(self, 二項演算子): self.演算値 = 二項演算子.入替(self.演算値, self.演算スタック) self.入力値 = 0 return self.演算値 class 単項演算子: def 入力(self, 演算器): return 演算器.単項演算子入力(self) class 二項演算子: def __init__(self, 優先順位): self.優先順位 = 優先順位 def 入力(self, 演算器): return 演算器.二項演算子入力(self) def 記憶(self, 演算値, スタック): while (len(スタック) > 0 and スタック[-1].優先順位 >= self.優先順位): 優先演算子 = スタック.pop() 被数 = スタック.pop() 演算値 = 優先演算子.演算(被数, 演算値) スタック.append(演算値) スタック.append(self) return 演算値 def 入替(self, 演算値, スタック): スタック.pop() スタック.pop() return self.記憶(演算値, スタック) class 御破算: def 入力(self, 演算器): return 演算器.御破算() class 数: def __init__(self, 数値): self.数値 = 数値 def 入力(self, 演算器): return 演算器.数値入力(演算器.入力値 * 演算器.基数 + self.数値) class 入力後退: def 入力(self, 演算器): return 演算器.数値入力(int(演算器.入力値 / 演算器.基数)) class 入力破棄(単項演算子): def 演算(self, 演算値): return 0 class 符号反転(単項演算子): def 演算(self, 演算値): return (-1) * 演算値 class 加算(二項演算子): def 演算(self, 被数, 加数): return 被数 + 加数 class 減算(二項演算子): def 演算(self, 被数, 減数): return 被数 - 減数 class 乗算(二項演算子): def 演算(self, 被数, 乗数): return 被数 * 乗数 class 除算(二項演算子): def 演算(self, 被数, 除数): return 被数 / 除数 class 演算(二項演算子): def 演算(self, 被数, 演算値): return 演算値 class 電卓: def __init__(self): self.演算器 = 演算器() self.操作 = {} self.操作['C'] = 御破算() self.操作['E'] = 入力破棄() self.操作['B'] = 入力後退() self.操作['+'] = 加算(1) self.操作['-'] = 減算(1) self.操作['*'] = 乗算(2) self.操作['/'] = 除算(2) self.操作['='] = 演算(0) self.操作['#'] = 符号反転() self.操作['0'] = 数(0) self.操作['1'] = 数(1) self.操作['2'] = 数(2) self.操作['3'] = 数(3) self.操作['4'] = 数(4) self.操作['5'] = 数(5) self.操作['6'] = 数(6) self.操作['7'] = 数(7) self.操作['8'] = 数(8) self.操作['9'] = 数(9) def 入力(self, 式): for 文字 in 式: 計算結果 = self.操作[文字].入力(self.演算器) return 計算結果 電卓 = 電卓() print("電卓.入力('1+2*3=')", 電卓.入力('1+2*3=')) print("電卓.入力('+5=')", 電卓.入力('+5='))
Private
[
?
]
Run code
Submit