import random
import jieba
import time
class Robot():
def __init__(self, name):
print('*' * 18 + '启动成功' + '*' * 18)
self.name = name
self.say_hi = ['你好', 'Hi', 'Hello', 'hi', 'hello', '好久不见']
self.say_bye = ['再见', 'Bye', 'bye', 'Bye-bye', 'Byebye', '再会', '回见', '88', '下次见']
def chat(self):
flag = False
while True:
msg = input('你说:')
jieba.load_userdict('words_dict.txt')
words = jieba.lcut(msg)
for word in words:
if word in self.say_hi:
print('{}说:{}'.format(self.name, random.choice(self.say_hi)))
break
elif word in self.say_bye:
print('{}说:{}'.format(self.name, random.choice(self.say_bye)))
flag = True
break
else:
print('{}说:我听不懂'.format(self.name))
if flag:
break
#自定义客服类,继承机器人类
class KeFu(Robot):
def __init__(self,name): #构造函数,初始化
Robot.__init__(self,name) #继承父类的所有属性
self.options = {'环境':'','服务':'','菜品':''} #新增客服类的评价属性options,存储关于环境,服务和菜品的评价
self.star = 0 #新增客服类的评分属性,初始分数为0
def chat(self): #chat()方法的重写,实例方法——输入评价内容
print('顾客您好,{}为您提供服务!'.format(self.name)) #提示语
for i in self.options.keys(): #遍历评价属性options中的所有键,环境,服务,菜品
while True: #无限循环
a = input('请对{}进行评价:'.format(i)) #依次输入对该项的具体评价内容
if a.strip()=='': #如果输入的是空
print('没有评价内容,请重新输入')
else: #如果输入的不是空字符串
self.options[i]=a #讲输入的评价内容存到该键的对应值上
break #跳出循环
while True:
self.star = int(input('请对餐厅进行综合评分:')) #将输入的评分字符串转换成整数
if self.star>=1 and self.star<=5: #如果输入的分数是在1-5之间,跳出循环
break
else: #输入的分数超出范围,重新输入
print('输入错误,只能输入1至5之间的整数')
def cun(self): #实例方法——存储评价内容
self.ping = [] #评价内容用列表存储
xing = self.star*'。'+(5-self.star)*'.' #根据得分显示星星
shi = time.strftime('%Y-%m-%d %H:%M:%S') #获得当前具体时间:年-月-日 时-分-秒
self.ping.append(xing+','+shi+'\n') #将得到的星星和时间追加到评价内容中
for i in self.options.keys(): #依次遍历评价属性中的所有键
self.ping.append(i+':'+self.options[i]+'\n') #将键和值的内容连接起来
self.ping.append('-'*20+'\n') #每个评价之间用一行符号隔开
ke = KeFu('客服机器人') #使用KeFu类创建ke对象,传入客服机器人name属性
ke.chat() #对象ke调用chat()方法输入评价内容
#print(ke.star)
ke.cun() #对象ke调用cun()方法存储评价内容
print(ke.ping) #输出评价内容
with open('全部评价.txt','a',encoding='utf-8') as f: #将评价内容存储到‘全部评价.txt’的文件中
f.writelines(ke.ping) #将评价内容列表中的元素写入文件