我在用 Python 实现状态设计模式时遇到了一些问题。
我是 Python 的新手,并编写了一些代码来尝试回答提出给我的这个问题:
为一个简单的 ATM 编写代码,允许用户插入他们的卡、输入他们的 PIN、请求现金和弹出卡。将以下对象模型用于显示状态模式使用的系统。您需要确定每个操作要更改为什么状态。
请参阅下面的 UML 图以获取更多信息:
下面是我的尝试...
import re
class AtmState(object):
name = "ready"
allowed = []
def switch(self, state):
""" Switch to new state """
if state.name in self.allowed:
# print("Current {} => switched to new state {}.".format(self, state.name))
self.__class__=state
# These print statements show how you switch between states.
# else:
# print("Current {} => switched to {} not possible.".format(self, state.name))
def getState(self):
print("The current state is {}".format(self.state))
def __str__(self):
return self.name
def __repr__(self):
return r"The ATM is in a {} state.".format(self.state)
def insertCard(self, card):
# Set messages for card format and inserted
wrong_format = "Please insert your card in the following format: XXXX-XXXX-XXXX-XXXX."
card_inserted = "Card Inserted: {}"
card_pattern='^([0-9]{4})(-?|\s)([0-9]{4})(-?|\s)([0-9]{4})(-?|\s)([0-9]{4})$'
pattern = re.compile(card_pattern)
if pattern.match(card) and str(self.state) in ["insert", "ready", "no card"]:
self.state.switch(HasCard)
print(card_inserted.format(card))
self.state.switch(HasPin)
elif pattern.match(card)==False and str(self.state) ["insert", "ready", "no card"]:
print(wrong_format)
elif str(self.state) in ["enter_pin", "withdraw"]:
print("Card already inserted")
elif str(self.state) in ["no card"]:
print("Error: No Card Inserted. Please insert card.")
对我来说最大的困惑是如何使用类来实现它?我能够获得正确的逻辑,但我正在努力使用状态设计模式进行实现。
任何指导将不胜感激。
噜噜哒
ITMISS
相关分类