[ create a new paste ] login | about

Link: http://codepad.org/ExT75Mhu    [ raw code | fork ]

ikkyu - Python, pasted on Nov 17:
#!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='))


Create a new paste based on this one


Comments: