上次做完應該長這樣:
那我們來開始一一實現他們的功能~
def press(self, pressed):
if self.showLabel.text() == "0":
self.showLabel.setText("")
self.showLabel.setText(f'{self.showLabel.text()}{pressed}')
def back(self):
screen = self.showLabel.text()
screen = screen[:-1] # 去掉最最一個
self.showLabel.setText(screen) # 顯示到螢幕
def op(self):
screen = self.showLabel.text()
if not screen:
return
# 找最後一個運算子
last_op_pos = -1
for i in range(len(screen)-1, -1, -1):
if screen[i] in '+-*/':
last_op_pos = i
break
# 拆分成前綴與當前數字
before = screen[:last_op_pos+1]
number = screen[last_op_pos+1:]
# 如果是以單一負號開頭,去掉;否則加上單一負號
if number.startswith('-') and not number.startswith('--'):
number = number[1:]
else:
number = '-' + number.lstrip('-') # 移除多餘負號再補一個
self.showLabel.setText(before + number)
def equal(self):
screen = self.showLabel.text()
try:
ans = eval(screen) # python eval(),非常強大會直接幫你計算結果
self.showLabel.setText(str(ans))
except:
self.showLabel.setText("錯誤發生")
def dot(self):
screen = self.showLabel.text()
# 從右邊開始找到最近的運算子
operators = ['+', '-', '*', '/', '=', '%']
last_operator_pos = -1
for op in operators:
pos = screen.rfind(op)
if pos > last_operator_pos:
last_operator_pos = pos
# 取出目前這個數字(例如3+4.5 => 4.5)
current_number = screen[last_operator_pos + 1:]
if "." not in current_number:
self.showLabel.setText(f'{screen}.')
成果影片:https://youtu.be/gRWmAvSWb6s?si=gyOetcmkrgpV1jx9
下次要來做新的作品,計算機的成果蠻有成就感的哈哈,已經開始期待還能做出什麼了,那我們下次見~