# -*- coding: utf-8 -*-
import aiml
import sys
import os
def get_module_dir(name):
print("module", sys.modules[name])
path = getattr(sys.modules[name], '__file__', None)
print(path)
if not path:
raise AttributeError('module %s has not attribute __file__' % name)
return os.path.dirname(os.path.abspath(path))
alice_path = get_module_dir('aiml') + '\\botdata\\alice'
os.chdir(alice_path) # 切换到语料库所在工作目录
alice = aiml.Kernel() # 创建机器人alice对象
alice.learn("startup.xml") # 加载...\\botdata\\alice\\startup.xml
alice.respond('LOAD ALICE') # 加载...\\botdata\\alice目录下的语料库
while True:
message = input("Enter your message >> ")
if("exit" == message):
exit()
response = alice.respond(message) # 机器人应答
print(response)
为了防止侵权查水表,特此声明:文中总结图片均来自@风变编程,博主进行了主要知识点的总结,以及新知识的添加。
(1)打印出hello world
# -*- coding: utf-8 -*-
print "hello world"
print "你好 世界"
1、Python2 里面print可以直接接字符串或者运算
2、Python3 里面print变成了一个函数,上面的写法不支持了,必须用一个括号括起来,否则会报告语法错误
3、>>>是Python解释器的提示符,不是代码的一部分
4、print语句也可以跟上多个字符串,用逗号“,”隔开,遇到逗号“,”会输出一个空格
5、多行输出使用三个引号和使用换行符\n一致
6、转义,详见后面总结
7、print 语句与字符串格式运算符( % )结合使用,可实现字符串替换功能,详见8中描述的格式化输出
%s表示由一个字符串来替换,%d表示由一个整数来替换,%f表示由一个浮点数来替换。
Python 非常灵活,即使将数字传递给 %s,也不会像其他要求严格的语言一样引发严重后果。
8、任何一门语言都有格式化输出控制,python也不例外,可通过%和format函数对象实现:
①整数输出:
%o —— oct 八进制
%d —— dec 十进制
%x —— hex 十六进制
②浮点数输出:
1、格式化输出
%f ——保留小数点后面六位有效数字
%.3f,保留3位小数位
%e ——保留小数点后面六位有效数字,指数形式输出
%.3e,保留3位小数位,使用科学计数法
%g ——在保证六位有效数字的前提下,使用小数方式,否则使用科学计数法
%.3g,保留3位有效数字,使用小数或科学计数法
2、内置round()
round(number[, ndigits])
参数:
number - 这是一个数字表达式。
ndigits - 表示从小数点到最后四舍五入的位数。默认值为0。
返回值
该方法返回x的小数点舍入为n位数后的值。
round()函数只有一个参数,不指定位数的时候,返回一个整数,而且是最靠近的整数,类似于四舍五入,当指定取舍的小数点位数的时候,一般情况也是使用四舍五入的规则,但是碰到.5的情况时,如果要取舍的位数前的小数是奇数,则直接舍弃,如果是偶数则向上取舍。
注:“.5”这个是一个“坑”,且python2和python3出来的接口有时候是不一样的,尽量避免使用round()函数
③字符串输出:
%s
%10s——右对齐,占位符10位
%-10s——左对齐,占位符10位
%.2s——截取2位字符串
%10.2s——10位占位符,截取两位字符串
④format() 对象:
相对基本格式化输出采用‘%’的方法,format()功能更强大,该函数把字符串当成一个模板,通过传入的参数进行格式化,并且使用大括号‘{}’作为特殊字符代替‘%’
位置匹配:
(1)不带编号,即“{}”
(2)带数字编号,可调换顺序,即“{1}”、“{2}”
(3)带关键字,即“{a}”、“{tom}”
>>> print('{} {}'.format('hello','world')) # 不带字段
hello world
>>> print('{0} {1}'.format('hello','world')) # 带数字编号
hello world
>>> print('{0} {1} {0}'.format('hello','world')) # 打乱顺序
hello world hello
>>> print('{1} {1} {0}'.format('hello','world'))
world world hello
>>> print('{a} {tom} {a}'.format(tom='hello',a='world')) # 带关键字
world hello world
(2)注释
1、(单行注释)以 # 开头,后面的文字直到行尾都算注释
2、(多行注释)多行注释是用三引号''' '''包含的(单引号和双引号均可)
3、(中文注释)要注释中文必须程序开头先写上# -*- coding: utf-8 -*-,不然会报错
(3)数据类型
1、变量不需要声明,可以直接输入,大小写敏感
2、这里的var = xxxx不叫变量赋值,而叫变量绑定,一个符号可以绑定任意类型的值。
3、内置函数type(), 用以查询变量的类型
4、字符串以''或" "括起来的任意文本
5、布尔型(True, False,可以用and, or, not运算,而不是C语言的&&和||)
6、多变量赋值
7、赋值语句不可以返回值,对象是通过引用传递的
(4)运算
1、加、减、乘、除、求余、乘方
2、乘方 ** 右结合
2**3=8
2**2**3=256
(2**2)**3=64
3、整数运算结果仍然是整数,浮点数运算结果仍然是浮点数。
但是整数和浮点数混合运算的结果就变成浮点数了。
4、字符串与整数相乘
print 'abc' * 3 结果 abcabcabc
5、因为Python把0、空字符串''和None看成 False,其他数值和非空字符串都看成 True
True and 'a=T' 计算结果是 'a=T'
继续计算 'a=T' or 'a=F' 计算结果还是 'a=T'
要解释上述结果,又涉及到 and 和 or 运算的一条重要法则:短路计算。
①在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。
②在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。
所以Python解释器在做布尔运算时,只要能提前确定计算结果,它就不会往后算了,直接返回结果。
6、不支持自加(i++)和自减(i--)
7、地板除(//)除法不管操作数何种数值类型,总是舍去小数部分,返回数字序列中比真正的商小的最接近的数字。
下表中总结了常用的转义字符,可以直接使用:
(5)输入:
input() 在对待纯数字输入返回所输入的数字的类型(int,float)而raw_input() 将所有输入作为字符串看待,返回字符串类型。 为了避免类型发生错误,一般情况下使用 raw_input() 来与用户交互。
(6)代码组规范:
代码组的编写规范参加下图总结:
下面的一个实例代码,用于今天总结的控制基础操作的知识点,其功能是实现一个矩阵的输出到控制台,具体内容如下所示:
print("Please input a number:",end='')
num = int(input())
n = num*2
Matrix = [([0] * n)for i in range(n)]
for i in range(0,num):
x = num-i
for j in range(i,n-i):
#print(j)
#Matrix[i].insert(j,num-i)
#Matrix[j].insert(i,num-i)
#Matrix[n-i-1].insert(j,num-i)
#Matrix[j].insert(n-i-1,num-i)
Matrix[i][j] = x
Matrix[j][i] = x
Matrix[n-i-1][j] = x
Matrix[j][n-i-1] = x
for i in range(0,n):
#print(i)
for j in range(0,n):
print(str(Matrix[i][j])+" ",end='')
# print(" ",end='')
print('\n')
具体运行中for语句和矩阵的写入不需要了解,只需要理解python的输入输出赋值变量的操作即可,不难得到输出结果为:
矩阵的成功打印,意味着我们已经正式进入Python的学习工作了,并且逐渐会让python为我们所用所享。这又是一个顺利而又精彩的开始。