Python程序设计与科学计算精录&总结Episode.1 Python基础语法:变量、符号、运算、操作、控制流知识总结(基于风变编程Python体验课)

在潜意识中,熟悉C的你,认为二十几行代码能够写个什么东西出来?把下面这二十几行代码复制到Python编译器里面去(不论IDLE还是Visual Studio都可以,博主习惯用VS写程序),然后运行。注意在控制台中输入的话都需要用英文哦!我等着你一脸懵逼地回到文章中来。

# -*- 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)

我知道你没有复制运行,所以我解释解释:以上这29行代码运行后,即使不善言辞,都能和电脑聊一天,这就是总所周知的Siri、S Voice、Cortana等电脑/手机人工智能交流助手的简单实现。如果需要中文智能交流,同上的控制台程序也不需超过100行。

从我们这一届开始,数值计算课程本学院的专修课便不再教学Matlab了(虽然这无疑仍然是性能功能最强大的工具),而是改用Python进行科学计算的实现。我不否认诸如Julia这样的新型语言方兴未艾而来势汹汹,但我否认当前Python已经在严重走下坡路不适合大量投入精力学习的观点。至少从当前的语言生态和技术支撑力度来看,朱莉娅公主还是很怕房间里的虫子。总的来看,一窝蜂都去学Python卷积神经网络、深度学习的东西,固然是有趣而高薪的,但也同时折煞了Python这款在数据计算、自动办公方面近乎无敌的高级语言。对于不做底层开发的小伙伴们来说,Python甚至比C++更适合尽早学习。

我更喜欢用Python科学计算,一方面是Python是可以写入诸如Sipeed M1 Dock这样的芯片的一种程序,这就不同于Matlab。另一方面,VS开发环境相对轻巧,IDLE更是简洁。简约,很少被人发现,很难被人赞赏,被人追逐。因为简约是对轻佻的蔑视,对炫耀的抵制。

所以新系列的Python总结,我会借助诸如A Bite of Python等Python科学计算的书籍,风变科技推出的Python基础课程,以及其它专业方面的书籍,用最简方式总结Python基础、计算、信号处理的运用方式。


为了防止侵权查水表,特此声明:文中总结图片均来自@风变编程,博主进行了主要知识点的总结,以及新知识的添加。

Python基础语法:

(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为我们所用所享。这又是一个顺利而又精彩的开始。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值