从零开始的人工智能学习(一)

        本周我主要学习的是基本的python的语法和科学计算,有些人说人工智能不需要太高的编程能力,但我觉得学而不精太可惜了。    

        我学习python语法使用的是《笨办法学python3》,不得不说,作者真的是把我们当作一个小孩子来教的,书里还有配套教学视频,基本上算是手把手教了。本书最大的优点是作者会尝试的破坏一个完整的程序,然后展示出所谓的bug让读者去debug,这种学习的方法我觉得比单纯的学习枯燥的语法要来的有趣而高效。视频是英文语音,中文字幕的,还可以练练英语听力不是么?一举两得,语速和语调都很合适,一举两得。

       学习的过程中,由于是学习AI,所以我下载的是anaconda的科学包,一开始并不知道anaconda带的那些程序是什么,询问一个dalao才知道:

Spyder基于B/S的交互式python解释环境
Jupyter基于C/S的交互式python解释环境
Reset那个,你加油,有个工地英语就知道意思了。
Anaconda Prompt,命令行下的anaconda,可以做一些环境的配置、和各环境的切换。
Anaconda Navigtor,用户交互式界面下的anaconda,可以做一些环境的配置、和各环境的切换。里面还带了一些学习文档和社区信息。

      以上都截取于该大佬提供的资料。不明觉厉有没有!但是我目前主要要用的是python3.7包。不得不说,python的科学包真的太强大了。关于anaconda的安装教程我截取了一段链接:

https://jingyan.baidu.com/article/3f16e0031e87522591c10320.html 

     书上使用的是win powershell来跑python,那我也跟样学样使用吧。关于命令行的入门,书上附录上就有。看视频也能学会的。

     文本编辑器用的是visual studio code,其实code也能跑python,但是作者说用命令行比较好。

     我还下了一个python开发者都应该在用的IDE--pycharm。下载很简单,网上也有教程,就在csdn上。

https://blog.csdn.net/pdcfighting/article/details/80297499

     关于注册码,csdn也有

https://blog.csdn.net/u014044812/article/details/78727496

     不得不说,csdn真的非常强大啊。

接下来就是学习了,这个星期学习的python语法很简单,和c有很多共通只处,然而想快速入门python,有人给我推荐了Learn X in Y minuteshttps://learnxinyminutes.com/docs/python/由于是全英文版的,所以也能练练英文水平对吧。接下来就是我的学习笔记了,跟翻译其实没有什么区别,但也加上了在我实际操作以后的一些探索与心得。

x = 'apple'
y = 'lemon'
#打印字符串中第一个字符
print("This is a string."[0]) # =>T
#打印出字符x的第二个字符
print(x[2]) # =>p
#打印出字符串长度
print(len(x)) # =>5
print()

#以下四种是嵌套字符串的方式
print("The items in %s and %s" %(x, y))
# =>The items in apple and lemon
print("{} is a {}".format(x, y))
# =>apple is a lemon
print("{0} can be {1}".format(x, y))
# =>apple can be lemon
print(f"{x} is like {y}")
# =>apple is like lemon
print()

#在这里要提一下==与is的区别
#==比较对象的内容是不是完全相同(不管两者的地址是否相同)
#is比较两个实例对象是不是完全相同,或者说这两个实例是不是同一个对象
#但在研究is的时候我有一个颠覆我想象的发现
#我在查找资料的时候发现实验与理论上的结果不同,然后发现
#如果声明一个变量为一个数字或者字符串,与另一个变量的内容相等,那么这两个变量归为一个地址
num = 1
lum = 1
print(num is lum) # =>True
#用id查询地址
print(id(num), id(lum))# =>140704949384016 140704949384016
print()

#对其中一个变量名重新赋值
num = num * 2
print(num is lum) # =>False
print(id(num), id(lum)) # =>140704949384048 140704949384016
#实验结果不可思议,可以看到,原本两个相同地址的变量,地址发生了改变
#数值不变的变量lum的地址不变,而数值改变的变量num被分配了一个新的地址
#进一步探究,现在改变lum的值,使其与num的值相同
print()

lum = lum * 2
print(num is lum) # =>True
print(id(num), id(lum))# =>140704949384048 140704949384048
#果不奇然,当lum的值与num相同时,lum的地址则改变为了num的地址,而原本lum的地址则不翼而飞
#这很神奇,不得不说,python在我们看不到的很多地方做了很多优化
#那么谁主导这个地址呢,是lum?是num?还是单纯是这个值呢?
print()

#我们继续,首先重新声明一个变量
kum = 5
print(id(kum))# =>140704949384144
kum = 50
print(id(kum))# =>140704949385584
gum = 5
print(id(gum))# =>140704949384144
#可以发现,kum的值改变时,地址也随之改变。
#当新声明一个变量,且变量等于先前的那个值的时候,这个新变量的地址又与之前那个完全相同了。
#那么现在,我们可以认为是值主导这个地址了
#但在这个地址没有变量名的时候,里面是否还有这个值,我学疏才浅,不得而知。
print()
#既然如此,那么符合is判断的条件的就只有列表了,因此
#设置两个列表
li1 = [1,2,3]
li2 = [1,2,3]
print(id(li1), id(li2))# =>2686962852360 2686962852424
print(li1 == li2) # =>True
print(li1 is li2) # =>False
print()

#None代表空,与c中的NULL类似,与其他任何数比较都为False
print(None is None) # =>True
print(None is x) # =>False
print(x is x) # =>True
print(x == y) # =>True
print(y is x) # =>True
print()

#布尔型常量,当函数参数为空,0或者其他所有代表空的数,都返回False
print(bool(0)) # =>False
print(bool(1)) # =>True
print(bool()) # =>False
print(bool(x)) # =>True
print(bool(None)) # =>False
print()
#以下是最简单的向程序输入数据的方法,input函数
#input_string_var = input("Enter some data:")
#print(input_string_var)

#类似于c的(x < y ? true : false)
#如果条件成立就执行语句,否则执行语句二
print(x < y)
print("statement1" if x < y else "statement2")
print("yahoo!" if 3 < 2 else 2)
print()
#以下是关于列表的运用
#设置一个空列表
li = []
#设置一个非空列表
other_li = [4,5,6]
#在列表末添加函数append中的参数
li.append(1)
li.append(2)
li.append(3)
print(li) # => li = [1,2,3]
#删除最后一个列表值
li.pop() 
print(li) # =>li = [1,2]
#对指定列表位置赋值
li[0] = 42
print(li) # =>li = [42,2]
#打印列表的最后一个列表值
print(li[-1]) # => 2
print()
#重新赋值列表,列表下标和c一样从0开始
li = [1,2,3,4,5,6]
#索引下标1到3,包括1不包括3的列表切片,类数学中的[x, y)
print(li[1:3]) # => [2,3]
#索引下标大于等于2的列表切片
print(li[2:]) # => [3,4,5,6]
#索引下标小于5的列表切片
print(li[:5]) # => [1,2,3,4,5]
#从0开始索引步长为二的的列表切片
print(li[::2]) # =>[1,3,5]
#倒置列表
print(li[::-1]) # =>[6,5,4,3,2,1]
#删除列表特定位置
del li[2]
print(li) # =>[1,2,4,5,6]
#两个列表相加为合并列表
print(li + other_li)# =>[1, 2, 4, 5, 6, 4, 5, 6]
#print(最小下标闭区间:最大下标开区间:步长)
print()

li = [1,2,3]
other_li = [4,5,6,2]
#连接列表
li.extend(other_li)
print(li) # =>li = [1,2,3,4,5,6,2]
#删除第一次出现的特定值
li.remove(2) # =>li = [1,3,4,5,6,2]
print(li)
#在指定位置插入一个元素(下标,元素)
li.insert(1,2) # => [1,2,3,4,5,6,2]
print(li)
#查找特定值的下标
print(li.index(1))# =>0
print(li.index(2))# =>1
print(li.index(3))# =>2
#检查元素是否存在于列表中
print(1 in li) # => True
#查询列表长度
print(len(li)) # =>7
print()

#元组类似于列表,但不可变
#只要不改变元素,类似列表的操作,元组都可以完成
tup = (1,2,3)
print(tup[0])# =>1
#类似于tup[0] = 3,这种改变元素值的语句将会报错
print()

#可以将元组(或列表)解包为变量
a,b,c = (1,2,3)
#现在a = 1, b = 2, c = 3
#声明也可以如下不加括号
d,e,f = 4,5,6
print(a,b,c,d,e,f)# =>1,2,3,4,5,6
#如果给一个变量名赋予多个值,将默认创造元组
g = 4,5,6 #=>(4,5,6)
print(g)
#交换数值,e = 5,d = 4
e,d = d,e
print(e,d)# =>4,5
print()
#下面是字典的应用,关键字和值必须要成对,不然会报错
empty_dict = {}
filled_dict = {"one" : 1, "two" : 2, "three" : 3}
#使用[]查找关键字对应的值
print(filled_dict["one"])# => 1
#将所有的关键字作为列表打出
print(filled_dict.keys())# => ["one", "two", "three"]
#在此,文章上写道不一定会按顺序打出,但我运行的时候都是按顺序打出来的
#将所有的值作为列表打出
print(filled_dict.values())# =>[3,2,1]
#也不一定按顺序打出,但我运行的时候还是按顺序的
#将所有的组合作为列表打出
print(filled_dict.items())# =>[("one", 1), ("two", 2), ("three", 3)]
#类似于列表的操作,如下,注意只能查找关键词
print("one" in filled_dict) # =>True
print(1 in filled_dict)# =>False
#关键词不存在时,会报错,如filled_dict["Four"]
#为了避免报错,我们可以使用get()
print(filled_dict.get("one")) # => 1
print(filled_dict.get("four")) # => None
#当字典缺少值时,get()支持返回默认参数,当关键词不存在时,返回默认参数
print(filled_dict.get("one", 4))# =>1
print(filled_dict.get("four", 4))# =>4
#注意填充的get("four")依旧返回None,get不在字典中设值
#要设置值的话可以用类似列表的方法
filled_dict["four"] = 4

由于这一周在复习备考期末考试,所以就只看了一点点。如果笔记存在错误,都可以指出来,我会一一道谢并更改的,英语水平不是很高,见谅见谅。

猜你喜欢

转载自blog.csdn.net/qq_43316108/article/details/85675360