Python 号称是最接近人工智能的语言,因为它的动态便捷性和灵活的三方扩展,成就了它在人工智能领域的丰碑

走进Python,靠近人工智能

一.编程语言Python的基础 之 "浅入浅出"不是不给你讲,而是重点在人工智能应用

1.变量

声明变量:

 name = "DragonFire"  # 声明一个变量name 用来存储一个字符串"DragonFire"
age = 20 # 声明一个变量age 用来存储一个数字 20 print(name, age) # 在控制台打印变量name中存储的字符串 和 变量age中存储的数字 (DragonFire 20)
print("name", "age") # 在控制台打印字符串"name" 和 "age" (name age) # 小练习
# 在控制台打印 name DragonFire age 20

声明变量

2.控制台交互

 # 打开控制台输入模式,输入提示语为"请输入你的名字>>>" 并将用户输入的信息保存在username变量中
username = input("请输入你的名字>>>") # 在控制台打印变量username所存储的数值
print(username)

# 小例子
username = input("你叫什么名字? >>>") print("你好!",username,"我是Python程序")

3.逻辑运算

# == , != , <= , >= , < , >  逻辑运算符
print(1 == 1) # 真
print(1 == 2) # 假
print(1 != 2) # 真
print(1 != 1) # 假
print(1 <= 2) # 真
print(1 >= 2) # 假
print(1 < 2) # 真
print(1 > 2) # 假 # 思考题
print(1 == "") # 真 还是 假 # 与或非
print(1 == 1 and 2 == 2) # 真 and 真 = 真
print(1 == 1 and 1 == 2) # 真 and 假 = 假
print(2 == 1 and 1 == 2) # 假 and 假 = 假 print(1 == 1 or 2 == 2) # 真 or 真 = 真
print(1 == 1 or 1 == 2) # 真 or 假 = 真
print(2 == 1 or 1 == 2) # 假 or 假 = 假 print(not 1 == 1) # not 真 = 假
print(not 1 == 2) # not 假 = 真

4.流程控制

#流程控制 之 if else 判断
if 1 == 1: # 如果 if 跟随的条件 为 真 那么执行属于 if 中的语句
print("真的") if 1 == 2: # 如果 if 跟随的条件为 假 那么不执行属于if 的语句,然后寻找 else
print("假的")
else: # 寻找到 else 之后 执行属于else中的语句
print("1==2 假的") #高端判断 之 否则如果:
if 1==2:
print("1==2") elif 1==1 : #如果 if 条件不成立,会进行第二次判断 elif ,如果elif条件成立,则执行属于elif中的语句,如不成立则else
print("1==1") else:
print("全是骗人的")

做一个用户登录小例子:

# 综合上述知识,我们做个小练习
username = input("输入用户名:")
pwd = input("输入密码:") if username == "" and pwd == "":
print("欢迎登陆")

流程控制 之 循环

# 讲道理它应该是从头到尾的 for 循环
for i in range(10): # 从0开始循环到9
print(i)
#带条件的While 循环,讲道理它根本不会自己停下来
while 1==1 : # 如果while 的条件成立,则运行属于while中的语句,直到条件不成立为止
print("你好") #劝你不要尝试

主动停止当次或者终止循环

# 循环中带着判断 ,  你好我是continue , Hello 我是 break
for i in range(10):
if i == 5: # 当 i 为5 时
continue # 停止当次循环回到最开始继续循环
if i == 7: # 当 i 为 7 时
break # 停止全部循环
print(i) # 打印结果显而易见,不会显示5 当遇到7 的时候不会打印,并且程序结束 也就是 0,1,2,3,4,6

特殊的while循环

i = 0
flag = True # while循环的停止方式有两种
while flag :
i = i + 1
if i == 5:
continue
if i == 7:
flag = False # 第一种停止方式就是让while 的条件不成立
if i == 9:
break # 第二种停止方式就是 break

结合循环,再做一个用户登录的例子:

# 用户名密码错误,就重复输入到正确为止
while True:
username = input("输入用户名:")
pwd = input("输入密码:") if username == "" and pwd == "":
print("欢迎登陆")
break
else:
continue

5.数据类型

int 整型:不带引号的整数数字,正负都可以取值范围: 32位操作系统 : -2147483648 至 2147483648  64位操作系统: -9223372036854775808 至 9223372036854775807

num = 1 #声明一个int型变量num 并赋值为 1
print(type(num)) # 打印变量num的类型
# <class 'int'> 类型为"int"

float 浮点型 : 不带引号的小数,正负都可以但是长度有限制取值:

num = 1.2 #声明一个float型变量num 并赋值为 1.2
print(type(num)) # 打印变量num的类型
# <class 'float'> 类型为"int"

布尔型 : 也可以叫真假值,就是之前用来判断真假的 True 和 False

boo = True #声明一个 bool  型变量 boo 并赋值为 True
print(type(boo)) # 打印变量 boo 的类型
# <class 'bool'> 类型为"bool"

字符串 : 带引号里面写的基本上都是字符串"这就是个字符串儿"

string = "Oldboy Edu" #声明一个 string  型变量 str 并赋值为 Oldboy Edu
print(type(str)) # 打印变量 string 的类型
# <class 'str'> 类型为"str" #字符串类型中的操作:
#字符串索引:
print(string[0]) #提取第一个字符
print(string[-1]) #提取最后一个字符 #字符串切片
print(string[0:4]) #提取第一个到第四个字符 #字符串拼接:
print("你好 %s"%(string)) # 你好 Oldboy Edu %s 被 string 替换 #字符串分割:
print( string.split(" ") ) # 使用空格分割 #字符串去除空格
print( string.strip() )

列表 : 被中括号 [] 包裹 , 内部用逗号分隔元素 [1, 2, 3, "4"]

l = [1, 2, '', ["a", "b"]]  # 声明一个 l  型变量 list 并赋值为 [1, 2, '3', ["a", "b"]]
print(type(l)) # 打印变量 l 的类型
# <class 'list'> 类型为"list" #列表的操作:
#列表索引:
print(l[0]) #提取第一个元素
print(l[-1]) #提取最后一个元素 #列表切片
print(l[0:4]) #提取第一个到第四个元素 #添加元素
l.append("") # 在列表的尾端插入
print(l) #删除元素
l.pop(0) #删除第一个元素
print(l)
l.remove('') # 删除列表中的某一个元素
print(l) #列表的特殊用途:
#遍历列表
for item in l : # 每循环一次,从列表中拿出来一个元素
print(item) #列表包含
if 2 in l : # 2 in l 返回True 代表 2 存在于 l 中 反之 False
print(l)

元组 : 和列表几乎一样,只不过把中括号[] 换成了 () 并且 元组不能被修改,也就是不能添加和删除元素

t = (1, 2, '', ["a", "b"])  # 声明一个 t  型变量 tuple 并赋值为 (1, 2, '3', ["a", "b"])
print(type(t)) # 打印变量 t 的类型
# <class 'tuple'> 类型为"tuple" #元组的操作:
#元组索引:
print(t[0]) #提取第一个元素
print(t[-1]) #提取最后一个元素 #元组切片
print(t[0:4]) #提取第一个到第四个元素 #元组的特殊用途:
#遍历列表
for item in t : # 每循环一次,从元组中拿出来一个元素
print(item) #元组包含
if 2 in t : # 2 in l 返回True 代表 2 存在于 l 中 反之 False
print(t)

字典 : 就是键值对的存储,键值对-- k : v 字典{k1:v1,k2:v2} ,key不可重复,且无序

dic = {"name": "DragonFire", "age": 20}  # 声明一个 dict 型变量 dic 并赋值为 {"name": "DragonFire", "age": 20}
print(type(dic)) # 打印变量 dic 的类型
# <class 'dict'> 类型为"dict" # 取值:
print(dic["name"]) # 打印 dic 中 name 对应的值
print(dic.get("name")) # 如果dic中没有name不会抛出异常 # 修改:
dic["name"] = "Long"
print(dic) # 增加:
dic["gender"] = "man"
print(dic) # 删除:
del dic["gender"]
print(dic) # 字典的特殊用法:
#循环
for k,v in dic.items(): # 分别将字典的key和value拿出来
print(k,v)

集合 : 可以理解为只有Key的字典,不可重复,并且无序

s = {"name", "DragonFire", "age", 20}  # 声明一个 set 型变量 s 并赋值为  {"name", "DragonFire", "age", 20}
print(type(s)) # 打印变量 dic 的类型
# <class 'set'> 类型为"set" #添加元素
s.add("")
print(s) #删除元素
s.remove(20)
print(s)
s.pop() #随机删除一个
print(s) # set 是不能通过索引的方式取值的,但是可以通过for遍历的方式取值
for i in s:
print(i) # set 的特殊用法
# 求交集
l = ["name",1,2,20]
print(s.intersection(l)) # 可以获得交集

二.Python语言的进阶 之 这里学会了Python就会了70%

1.函数 : 你那么聪明根本都不需要看这个章节 之 def args kwargs
 def func(参数1,参数2):  # def 用来定义函数及函数名,参数1和参数2就是定义时的形参,也就是将来调用函数时必须要传入的参数
变量1 = 参数1+参数2
return 变量1

如果你看了并且还想点开看的话 + 看了就要记住不然别看

 #我们定义参数的时候,无法确定函数中会有多少参数时,需要可变长参数,也就是动态参数的参与处理 这里我们的*args 和 **kwargs 就起了作用

 *args 就是 将未定义且多余的 位置参数记录在内,偷偷的告诉你,args是个元祖,里面记录着你个函数传递的多余位置参数

 **kwargs 就是 将多余的关键字参数记录在内,我用嘹亮且带有磁性的声音,偷偷告诉你,kwargs 其实是个dict哦,里面大概就是{"name":"Dragon","age":1+1+1+1+1+1+18}

你总是这么变来变去的我都不爱你了 + *args **kwargs

 def args_func(a,b,*args):  # args 里面保存着除了ab之外的所有多余参数
print(args) # 这回知道是元祖了吧
for i in args:
print(i) args_func(1,2,3,4,5,6) # 这里调用的时候1,2分别传递给a,b,那么3456就会保存在args里面哦

*args 的糖炒栗子

 def kwargs_func(a, b, **kwargs):  # kwargs 里面保存着除了ab之外其他关键字传入参的参数
print(kwargs) # 这回知道是字典了吧
for k, v in kwargs:
print(k, v) kwargs_func(1, 2, c=3, d=4, e=5) # 这里调用的时候,12分别传递给a,b 那么c=3,d=4,e=5 就会保存在**kwargs里面哦

**kwargs 的 北京怀柔大板栗

 def args_kwargs_func(*args, **kwargs):  # 这里一定要注意*args 要在 **kwargs之前
print(args)
print(kwargs) args_kwargs_func(1, 2, a=1, b=2) # 12存入args a=1,b=2 存入kwargs,这里要注意的是关键字传参之后,不可以在位置传参了

*args **kwargs 的 糖炒北京怀柔大板栗

本节结束,忘记它吧

2.推导而不是推倒 之 推导式

推导式举两个怀柔大板栗:

列表推导式:很(yao)重(xue)要(hui)

 li = [i for i in range(10)]  # 简单的列表推导式,就是在列表内写一个for循环对吧
print(li) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] lis = [i for i in range(10) if i % 2 == 0] # 这是带if 条件的列表推导式
print(lis) # [0, 2, 4, 6, 8]

超级简单 + 学不会的开启while模式

生成器推导式 : 也(te)很(bie)重要

 gener = (i for i in range(10))  # 简单的生成器推导式,就是在元组内写一个for循环对吧
print(gener) # <generator object <genexpr> at 0x04F9B3C0> geners = (i for i in range(10) if i % 2 == 0) # 这是带if 条件的生成器推导式
print(geners) # <generator object <genexpr> at 0x04F9B3F0>

别以为我只是复制粘贴的 + 让你一点儿毛病也挑不到

从上述来看,列表推导式和生成器推导式只是[] 与 () 的区别

但是实际上,生成器推导式的效率非常高,但可控性很差,比如不直观,用一次就没了

相对而言列表推导式的效率比较低,但是可控性强,可以反复利用,而且数据显示很直观

本节及本章结束,内容较多,希望大家,都(bi)能(xu)学会

3.模块

import 的用法

字符串字符串字符串 之 json 模块

只要你是个说得上名的数据类型,我全给你弄成字符串,就问你服不服

 import json

 # 我们做一个字典
dic = {
"name": "Dragon",
"age": 20,
"hobby": ["摩托车", "骑车"],
"other": {
"say": "hello",
"see": "beautiful girl",
}
}
json_dic = json.dumps(dic) # json序列化 print(type(json_dic), json_dic) # <class 'str'> {"name": "Dragon", "age": 20, "hobby": ["\u6469\u6258\u8f66", "\u9a91\u8f66"], "other": {"say": "hello", "see": "beautiful girl"}} loads_dic = json.loads(json_dic) # json 反序列化 print(type(loads_dic), loads_dic) # <class 'dict'> {'name': 'Dragon', 'age': 20, 'hobby': ['摩托车', '骑车'], 'other': {'say': 'hello', 'see': 'beautiful girl'}}

一个神奇 json 有了它把一切不可能变为可能

json 用于数据传输上,非常的爽

兄弟就靠你了 之 os 模块

os 模块其实是集成了很多操作系统的方法,比如创建文件夹,拼接路径,删除文件,创建文件等等

import os
os.path.join("a","b") # 组合路径 a/b
os.system("ls") # 执行系统命令
os.sep() # 获取当前操作系统的路径分隔符
os.path.dirname(__file__) # 获取当前文件的所在目录
import os

os.getcwd()  # 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") # 改变当前脚本工作目录;相当于shell下cd
os.curdir() # 返回当前目录: ('.')
os.pardir() # 获取当前目录的父目录字符串名:('..')
os.makedirs('dir1/dir2') # 可生成多层递归目录
os.removedirs('dirname1') # 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname') # 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname') # 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname') # 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove("file_name") # 删除一个文件
os.rename("oldname", "new") # 重命名文件/目录
os.stat('path/filename') # 获取文件/目录信息
os.sep() # 操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep() # 当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep() # 用于分割文件路径的字符串
os.name() # 字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command") # 运行shell命令,直接显示
os.environ() # 获取系统环境变量
os.path.abspath(path) # 返回path规范化的绝对路径
os.path.split(path) # 将path分割成目录和文件名二元组返回
os.path.dirname(path) # 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) # 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) # 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) # 如果path是绝对路径,返回True
os.path.isfile(path) # 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) # 如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]]) # 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) # 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) # 返回path所指向的文件或者目录的最后修改时间

4.文件操作

f = open("123.txt","rb") #打开文件句柄
print(f.read()) # 读取文件内容
f.close() # 关闭文件句柄

打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。

打开文件的模式有:

  • r ,只读模式【默认】
  • w,只写模式【不可读;不存在则创建;存在则清空内容;】
  • x, 只写模式【不可读;不存在则创建,存在则报错】
  • a, 追加模式【可读;   不存在则创建;存在则只追加内容;】

"+" 表示可以同时读写某个文件

  • r+, 读写【可读,可写】
  • w+,写读【可读,可写】
  • x+ ,写读【可读,可写】
  • a+, 写读【可读,可写】

"b"表示以字节的方式操作

  • rb  或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b

注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型

# 文件上下文操作
with open("123.txt","rb") as f: # 文件句柄f 自动打开关闭文件句柄
f.read() # 读取文件内容(全部) with open("123.txt","rb") as f:
f.read() #读取文件内容(全部)
f.readline() # 读取文件中一行文件
f.readlines() # 读取文件中所有行 ["1","2"] f.write("") # 写入文件内容
f.writelines("") # 写入一行文件 f.flush()# 刷新文件
f.seek(10) # 移动光标到10位置
f.truncate(6) # 从光标当前位置截取6位
f.tell() # 获取当前光标位置

Python人工智能之路 - 第一篇 : 你得会点儿Python基础的更多相关文章

  1. PYthon成长之路第一篇(1)__字符串初识

    今天一起走进python的代码世界,一起领悟python的魅力 在很多学习python的书中都会以 print  “Hello,world!” 这样的而一个程序为开始,那么其中的 hello,worl ...

  2. Python人工智能之路 - 第二篇 : 算法实在太难了有现成的直接用吧

    本节内容 预备资料: 1.FFmpeg: 链接:https://pan.baidu.com/s/1jonSAa_TG2XuaJEy3iTmHg 密码:w6hk 2.baidu-aip: pip ins ...

  3. python成长之路第一篇(5)文件的基本操作

    一.三元运算 我们在上章学习的if,,else,,有一种简便的方法 他的表达式是这样的:变量 = 值1 if 条件 else 值2 解释过来就是如果aaa等于sss则输出值1否则输出值2 二.类的概念 ...

  4. Python成长之路第一篇(3)_初识字典

    经过上章的学习我们已经了解到了列表可以通过索引来获取对应的值,在本章我们将学到通过名字来索引数据,这种结构的类型称之为映射(maooing),在Python中字典是唯一内建的映射类型,其中的值我们称之 ...

  5. Python成长之路第一篇(4)_if,for,while条件语句

    有了以上的基本基础,已经上面写的几个小练习,大家肯定有很多的不满,比如查询为什么查询一次就退出了呢?下面我们来学习条件语句 一.万恶的加号 以前我们在print的时候如果要加上变量都有是使用+来作为连 ...

  6. Python成长之路第一篇(2)-初识列表和元组

    可以将列表和元组当成普通的“数组”,他能保存任意数量任意类型的Python对象,和数组一样都是通过数字0索引访问元素,列表和元组可以存储不同类型的对象,列表和元组有几处重要区别.列表元素用([])包括 ...

  7. Python成长之路第一篇(2)__初识列表和元组

    可以将列表和元组当成普通的“数组”,他能保存任意数量任意类型的Python对象,和数组一样都是通过数字0索引访问元素,列表和元组可以存储不同类型的对象,列表和元组有几处重要区别.列表元素用([])包括 ...

  8. Python编程笔记(第一篇)Python基础语法

    一.python介绍 1.编程语言排行榜 TIOBE榜 TIOBE编程语言排行榜是编程语言流行趋势的一个指标,每月更新,这份排行榜排名基于互联网有经验的程序员.课程和第三方厂商的数量. 2.pytho ...

  9. .NET持续集成与自动化部署之路第一篇——半天搭建你的Jenkins持续集成与自动化部署系统

    .NET持续集成与自动化部署之路第一篇(半天搭建你的Jenkins持续集成与自动化部署系统) 前言     相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛 ...

随机推荐

  1. 学会清理.rncache 文件、清理已经安装的三方文件,三方引入文件

    1.来到指定文件夹.rncache路径,不会的可以百度,然后手动删除. 2.更新RN引入的文件的版本号,要记得将yarn.lock (.lock文件删掉) 3.我用 npm install 之后,然后 ...

  2. Linux内核分析 读书笔记 (第一章、第二章)

    第一章 Linux内核简介 1.1 Unix的历史 Unix很简洁,仅仅提供几百个系统调用并且有一个非常明确的设计目的. 在Unix中,所有东西都被当做文件,这种抽象使对数据和对设备的操作是通过一套相 ...

  3. Daily Scrum - 12/04

    Meeting Minutes 与Qiufeng, Bojie, Zhongqiu, Ran, Travis一起讨论. 确定了最后的UI及Feature. 开始Code Review, 以及有计划的M ...

  4. node之post提交上传

    post文件上传 multer 中间件 在node中 express为了性能考虑采用按需加载的方式,引入各种中间件来完成需求, 平时解析post上传数据时候,是用body-parse.但这个中间件有缺 ...

  5. PHP + webuploader 视频上传

    上传方式,PHP默认方式 和 FTP 上传 1.修改PHP  配置: php.ini 修改以下配置项为适合的数据 php中 php.ini 文件修改 file_uploads = On //允许文件上 ...

  6. ELK环境配置

    一.安装java环境 1.下载jre并安装,安装过程中没有什么特殊的,一直默认下一步即可. 2.配置环境变量 其中变量值为我们安装的jre的路径 二.安装elasticsearch 1.下载es安装包 ...

  7. resultMap 表示转换字段后 resultType 表示没·有转换字段

    resultMap 表示转换字段后 resultType 表示没·有转换字段

  8. BZOJ2423 HAOI2010最长公共子序列(动态规划)

    大讨论.注意去重. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib& ...

  9. Rain on your Parade HDU - 2389 (hc板题)

    在客人能够拿到的伞与客人之间建边  跑hc就好了.... 看看别人的:https://blog.csdn.net/wall_f/article/details/8248350 #include < ...

  10. JAVA类变量(静态变量)

    类变量也称为静态变量,在类中以static关键字声明,但必须在方法.构造方法和语句块之外. -无论一个类创建了多少个对象,类只拥有类变量的一份拷贝. -静态变量除了被声明为常量外很少使用.常量是指声明 ...