自己随便写了一个人机交互的程序。不存在任何智能,只是可以识别姓名,可以记录对话内容,并保存等到下一次交互时加载。 (推荐面向对象版本)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# hello.py
# 这是老早写的。不过今天加入了Pickle,然后润色了一下。
# 可能有点无聊(不推荐使用)
import pickle
import os.path
def search(x, data):
for k, d in enumerate (data):
if x = = d[ 'name' ]:
return k, d
def save_data(A,pklname):
with open (pklname, 'wb' ) as pkl:
pickle.dump(A, pkl)
def load_data(pklname):
with open (pklname, 'rb' ) as pkl:
return pickle.load(pkl)
# communicating with computer
data = [] if not os.path.isfile( 'data' ) else load_data( 'data' )
while True :
print ( 'Welcome! [type "quit" if you want to quit.]' )
name = input ( '--What is your name?\n--' )
if name in { 'quit' , 'Quit' , 'q' , 'Q' }:
print ( '[You quit]' )
break
if not search(name, data):
print ( '--Welcome, ' + name + '. I will remember you name.' )
d = { 'name' :name, 'age' : 0 , 'history' :[]}
data.append(d)
else :
print ( '--Hi, ' + name + '. How I miss you.' )
k, d = search(name, data)
while d[ 'age' ] = = 0 :
age = input ( '--How old are you?[I will repeat until you respond!]' )
try :
if int (age) = = 0 : continue
d[ 'age' ] = int (age); data[k] = d
except :
pass
while True :
y = input ( '--Chan I help you? [yes/no]' )
while not y:
y = input ( '--Yes or no?' )
d[ 'history' ].append(y); data[k] = d
if y in { 'no' , 'No' , 'n' , 'N' }:
print ( '--%s.' % y)
print ( '--Bye bye.' )
break
elif y in { 'yes' , 'Yes' , 'y' , 'Y' }:
print ( '--%s.' % y)
print ( 'I am pleased to serve you.' )
else :
print ( 'I am sorry. I can not understand what you said.' )
break
# save data
y = input ( '--Do you want to save the data? [yes/no]' )
while not y:
y = input ( '--Yes or no?' )
if y in { 'no' , 'No' , 'n' , 'N' }:
print ( '--%s. [You say no.]' % y)
elif y in { 'yes' , 'Yes' , 'y' , 'Y' }:
print ( '--%s. [the data is saved in file named "data".]' % y)
save_data(data, 'data' )
else :
print ( 'I am sorry. I can not understand what you said. data are not saved.' )
|
下面是hello.py的面向对象编程版本(推荐)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# hello.py
import pickle
import os.path
def search(x, data):
for k, d in enumerate (data):
if x = = d[ 'name' ]:
return k, d
class Hello:
def __init__( self , name = '', data = None ):
self .name = name
self .data = data
def __getstate__( self ):
return self .data
def __setstate__( self , data):
self .data = data
def mainloop( self ):
while True :
print ( 'Welcome! [type "quit" if you want to quit.]' )
name = input ( '--What is your name?\n--' )
if name in { 'quit' , 'Quit' , 'q' , 'Q' }:
print ( '[You quit]' )
break
if not search(name, self .data):
print ( '--Welcome, ' + name + '. I will remember you name.' )
d = { 'name' :name, 'age' : 0 , 'history' :[]}
self .data.append(d)
else :
print ( '--Hi, ' + name + '. How I miss you.' )
k, d = search(name, self .data)
while d[ 'age' ] = = 0 :
age = input ( '--How old are you?[I will repeat until you respond!]' )
try :
if int (age) = = 0 : continue
d[ 'age' ] = int (age); self .data[k] = d
except :
pass
while True :
y = input ( '--Chan I help you? [yes/no]' )
while not y:
y = input ( '--Yes or no?' )
d[ 'history' ].append(y); self .data[k] = d
if y in { 'no' , 'No' , 'n' , 'N' }:
print ( '--%s.' % y)
print ( '--Bye bye.' )
break
elif y in { 'yes' , 'Yes' , 'y' , 'Y' }:
print ( '--%s.' % y)
print ( 'I am pleased to serve you.' )
else :
print ( 'I am sorry. I can not understand what you said.' )
break
# save data
y = input ( '--Do you want to save the data? [yes/no]' )
while not y:
y = input ( '--Yes or no?' )
if y in { 'no' , 'No' , 'n' , 'N' }:
print ( '--%s. [You say no.]' % y)
elif y in { 'yes' , 'Yes' , 'y' , 'Y' }:
print ( '--%s. [the data is saved in file named "data.pkl".]' % y)
with open ( 'data.pkl' , 'wb' ) as fo:
pickle.dump( self , fo)
else :
print ( 'I am sorry. I can not understand what you said. data are not saved.' )
# communicating with computer
try :
with open ( 'data.pkl' , 'rb' ) as fo:
hello = pickle.load(fo)
except :
hello = Hello( 'ai' ,[])
hello.mainloop()
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/nbu2004/article/details/49054299