学习新技能:Python and AI

  • by
为什么要进入这个陌生的世界,学习从未接触过的Python呢?
我们生活在一个敏感的时代,所以为了成功,我们必须进化。这样我们才能以新的角度,看到彼此。而Python是一面镜子,你可以从代码上看到最真实的自己。有的人直率,ta的代码逻辑也一通到底;有的人心思缜密,ta的代码则布满了嵌套;甚至你的懒也可以成为Python逻辑中的一个亮点:能一行代码搞定的,绝不写两行。握Python的底层逻辑,利用正确的语言和合理的逻辑构造命令,最后再对计算机输入自己的命令。这样我们才能以最真实的自己,得到计算机的回应;才能突破认知局限,从代码这面镜子中看到真我。

我们整天在新闻上看人工智能,整天在生活里用(这是真的)人工智能,但如果真地问起“人工智能是什么?”还真没几个人能把它说清楚。人工智能作为一门学科,其实并不是特别新潮。早在上世纪四五十年代,就已经有人开始做研究。技术一直都在发展,但它默默无闻不为人所知。只是近几年,人工智能技术发展到了一个关键节点:它能真正地帮人干活了。换句话说,技术找到了应用场景,而且它干得还不赖!一夜之间,恰如雨后春笋。所有和科技沾点边儿的公司,都要研究人工智能。未来的公司会是什么模样? 或者说,未来的工作会是什么模样?我们可以利用已有信息,做出合理的推演。未来没有任何一家企业可以与 AI 无关。但这些企业,这些共组可以被分层两类,他们都会创造巨大的价值,在人工智能时代获得巨大红利。

举一个简单的例子:

我是一个做高端地板工厂里的员工,每天的工作,就是用从一堆木板里,把有瑕疵的木板给挑出来。 墙上高挂标语:像选老公一样选表板!快!准!狠! 这看上去和人工智能半毛钱关系都没有。 我们每天要选超级多的表板出来,铺开来是十几亩地。

但是,只要简单地接入一条带摄像头的流水线,事情就可以发生变化。 引入图像识别技术,有毛面/裂纹/结疤/虫眼……的问题木板,都能被筛选出来。

引入这个技术,生产效率能翻倍。 以上,源自真实案例。

面对这样的未来,我们应该如何去做?答:从学编程开始。唯有如此,才能参与进人工智能的变革浪潮中去。但是步子太大了容易扯着蛋,所以还得从头开始,先从编程基础开始,挑一个最流行的,简单易学,Python就是其中之一,本文为学习笔记。

列表和字典

列表

一个列表需要用中括号[ ]把里面的各种数据框起来,里面的每一个数据叫作“元素”。每个元素之间都要用英文逗号隔开。列表很包容,各种类型的数据(整数/浮点数/字符串)无所不能包,这一点与input函数的输入值永远会被强制性地转换为字符串类型(Python3固定规则)不同。

列表中的每个元素都有自己的位置编号(即偏移量)。偏移量从0开始的,列表名后加带偏移量的中括号,就能取到相应位置的元素。例如:

students = [‘小明’,’小红’,’小刚’]
print (students[0])

以上代码打印出结果为:小明

用冒号来截取列表元素的操作叫作切片,就是将列表的某个片段拿出来处理。这种切片的方式可以从列表中取出多个元素。列表切片口诀:左右空,取到头;左要取,右不取。冒号左边空,就要从偏移量为0的元素开始取;右边空,就要取到列表的最后一个元素。冒号左边数字对应的元素要取,右边的数字对应元素不取。例如:

students = [‘小明’,’小红’,’小刚’]
print(students[:2])

以上代码打印出结果为:[‘小明’, ‘小红’]

注:偏移量取到的是列表中的元素,而切片则是截取了列表的某部分,所以还是列表。

append()函数

append()函数可以给列表增加元素。用append()给列表增加元素,每次只能增加一个元素(可以是字符串、数字,或列表本身)。其并不生成一个新列表,而是让列表末尾新增一个元素。而且,列表长度可变,理论容量无限,所以支持任意的嵌套。例如:

students = [‘小明’,’小红’,’小刚’]
students.append(‘小美’)
print (students)

以上代码打印出结果为:[‘小明’,’小红’,’小刚’,’小美’]

del语句

用于删除列表中的元素或清除整个列表,它既能删除一个元素,也能一次删除多个元素(原理和切片类似,左取右不取)。例如:

students = [‘小明’,’小红’,’小刚’,’小美’]
del students[1]
print (students)

以上代码打印出结果为:[‘小明’,’小刚’,’小美’]

字典

名字和数值(如分数、身高、体重等)两种数据存在一一对应的情况,用“字典”(dictionary)来存储会更方便。字典和列表有3个地方是一样的:1.有名称;2.要用=赋值;3.用逗号作为元素间的分隔符。不同之处为:1. 列表外层用的是中括号[ ],字典的外层是大括号{ };2. 列表中的元素是自成一体的,而字典的元素是由一个个键值对构成的,用英文冒号连接。例如:

students = ['小明','小红','小刚']
scores = {'小明':95,'小红':90,'小刚':90}
其中‘小明’叫键(key),95叫值(value)。字典中的键具备唯一性,而值可重复。用len()函数可以得出一个列表或者字典的长度(元素个数),括号里放列表或字典名称。

从字典中提取对应的值的方法和列表相似,要用[ ],不过因为字典没有偏移量,所以在中括号中应该写键的名称,即字典名[字典的键]。例如:

scores = {‘小明’:95,’小红’:90,’小刚’:90}
print (scores[‘小红’])

以上代码可打印出 90。

删除字典里键值对的代码是del语句:del 字典名[键],而新增键值对要用到赋值语句字典名[键] = 值。例如:

scores = {‘小明’:95,’小红’:90,’小刚’:90}
del scores[‘小刚’]
scores[‘小刚’] = ’92’
scores[‘小美’] = ’85’

print (scores)

以上代码可打印出:{‘小明’: 95, ‘小红’: 90, ‘小刚’: ’92’, ‘小美’: ’85’};修改值可以直接使用赋值语句实现,例如:
scores = {'小明':95,'小红':90,'小刚':90}
#del scores['小刚']
#如果只需要修改键里面的值,可不需要del语句
scores['小刚'] = 92

以上代码可打印出:{‘小明’: 95, ‘小红’: 90, ‘小刚’: ’92’}

列表和字典支持任意嵌套。例如:在班级里成立了以四人为单位的学习小组,以列表嵌套列表的形式可以是:

students = [['小明','小红','小刚','小美'],['小强','小兰','小伟','小芳']]

在提取这种多级嵌套的列表/字典时,要一层一层地取出来,就像剥洋葱一样,若提取“小芳”,代码为:

students = [['小明','小红','小刚','小美'],['小强','小兰','小伟','小芳']]
print(students[1][3])
# 1是外层列表包含小芳的元素的偏移量,3是被嵌套的列表中小芳的偏移量。

若提取字典中小芳的成绩,代码为:

scores = {
    '第一组':{'小明':95,'小红':90,'小刚':100,'小美':85},
    '第二组':{'小强':99,'小兰':89,'小伟':93,'小芳':88}
    }
print(scores['第二组']['小芳'])

列表和字典相互嵌套的情况,例如:

# 最外层是大括号,所以是字典嵌套列表,先找到字典的键对应的列表,再判断列表中要取出元素的偏移量
students = {
    '第一组':['小明','小红','小刚','小美'],
    '第二组':['小强','小兰','小伟','小芳']
    }
print(students['第一组'][3])
#取出'第一组'对应列表偏移量为3的元素,即'小美'

# 最外层是中括号,所以是列表嵌套字典,先判断字典是列表的第几个元素,再找出要取出的值相对应的键
scores = [
    {'小明':95,'小红':90,'小刚':100,'小美':85},
    {'小强':99,'小兰':89,'小伟':93,'小芳':88}
    ]
print(scores[1]['小强'])
#先定位到列表偏移量为1的元素,即第二个字典,再取出字典里键为'小强'对应的值,即99。

元组(tuple)

元组和表格很相似,不过,它是用小括号来包的。元组和列表都是序列,提取的方式也是偏移量,如 tuple1[1]、tuple1[1:]。另外,元组也支持任意的嵌套。


循环

每个人的生活和工作都充满了循环,很多时候,循环意味着重复和枯燥。比如一个RA,你需要重复申报资料、编写产品信息、一遍一遍地费劲口舌解释同样的事情……

又比如一些人一成不变、如同一潭死水般的生活。一成不变的生活终归需要你自己去打破循环,但工作的事,就大可让计算机帮一帮我们了。与人类不同,计算机不怕苦也不怕累,无聊的事情可以重复上千遍,只要能追寻到你想要的答案。

实现“重复、自动地执行代码”,有两种循环语句:for…in…循环和while循环。

for…in…循环语句

字典、列表和字符串能放在for...in...循环中,但整数、浮点数不可以。例如:

for i in [1,2,3,4,5]:

    print(i)

以上代码运行结果是1,2,3,4,5依次出现,这个过程,在Python中的学名是【遍历】。

除了列表,字典,字符串三种数据类型,还可以遍历其他的数据集合。比如和for循环常常一起搭配使用的:range() 函数。例如:

for i in range(3):
—-print(i)

以上代码运行后,整数0,1,2,依次出现。使用range(x)函数,可以生成一个从0x-1的整数序列。使用range(a,b) 函数,可以生成一个【取头不取尾】的整数序列。

把一段代码固定重复n次,可以直接使用for i in range(n)解决,例如:

for n in range(11):
—-print(‘书桓走的第’+ str(n) + ‘天,想他’)

以上代码打印出的结果为:

书桓走的第1天,想他

书桓走的第2天,想他
书桓走的第3天,想他
书桓走的第4天,想他
书桓走的第5天,想他
书桓走的第6天,想他
书桓走的第7天,想他
书桓走的第8天,想他
书桓走的第9天,想他
书桓走的第10天,想他

range()函数还有一种用法,例如:

for i in range(0,10,3):
—-print(i)

以上代码打印出的结果为:0,3,6,9。这里range(0,10,3)的意思是:从0数到9(取头不取尾),数数的间隔为3。

while循环

举例:预设密码为123,当输错密码错误的时候,会提示“请输入密码:”。直到密码输入正确,就会提示“登陆成功!”,代码如下:

password = ” # 变量password用来保存输入的密码

while password !=’123′:
—-password =input (‘请输入密码’)
print (‘登陆成功’)

while循环,在满足条件的时候,会一轮又一轮地循环执行代码。注:缩进后的【while子句】才会被循环执行,例如:

a = 0
while a < 5:
​    a = a + 1
    print(a)

# 与下面的代码执行结果不同
a = 0

while a < 5:
​    a = a + 1
print(a)

for…in…循环和while循环的区别

for循环和whlie循环最大的区别在于【循环的工作量是否确定】,for循环就像空房间依次办理业务,直到把【所有工作做完】才下班。但while循环就像哨卡放行,【满足条件就一直工作】,直到不满足条件就关闭哨卡。当【工作量确定】的时候,可以让for循环来完成重复性工作。反之,【工作量不确定时】可以让while循环来工作。有一种情况for循环和while循环都可以解决问题,那就是【把一件事情做N遍】。

 

 

 

 

 

未完待续……