Python[人工智能]时代的立身武器
人工智能正在悄然地改变我们的生活方式,传统行业纷纷转型,科幻电影的一幕幕正在变成现实。
随着技术的变革,人类简单重复性的劳动或思考活动已经逐步被机器取代。那么,该如何改变工作方式和学习思维?如何利用技术加持竞争力?
在互联网+时代,『编程』已不是『程序员』、『工程师』的专属,而是一个通往未来世界的工具,甚至是一个新的机遇。
如果现在想掌握编程技能的话,小迪强烈推荐你Python,它无处不在!
Python是一门编程语言,能够帮助人们更好地与计算机“沟通”。不仅如此,它还是编程语言界里的新晋网红。
或许很多人会有疑问:Python凭什么从C++、Java等老牌编程语言中脱颖而出,成为一匹黑马呢?小迪本人会C、C++、C#、javascript,但是自认为python是其中最为简单和最好理解的语言。打个比方好了,如果说编程语言是我们在新世界冒险中必备的武器,Python和Java、C、C++比起来,功能大概是这样的……
它的强大之处在于:
(1)它背后有着最庞大的免费“代码库”,给初学者足够的资源实现自己想要的功能。
(2)它是人工智能、大数据分析的重要支持语言。
(3)它被称为“胶水语言”,能很好包装和调用其他编程语言写的库。
(4)它是一个脚本语言,和其它编程语言相比更加简洁、高效。
最最重要的是,python应用领域广泛,例如:爬虫,数据分析,科学计算,自动化办公,自动化运维,网站开发,多媒体处理,机器学习,深度学习等。下图展示了学习python的知识框架。
说到这,大多数人也一样厌倦了把时间反反复复地花在无价值的劳动上吧。那么,不如勇敢迈出第一步,尝试做点什么,改变现状。可能晒微花了一段时间学习之后,已经可以自己琢磨着编出个小程序来,让计算机帮忙批量整理数据。
有时侯还能做出一些有趣的东西,看,利用Python当一回编程界“社会人”——让计算机画个画。
对于自动化办公,python绝对是一大神器,使用python实现审计底稿的批量自动化处理。
文档管理:shutil和zipfile,自动完成复制/移动/改名/删除/读取/解压/压缩
数据处理:openpyxl和csv,自动处理excel和csv数据
文字处理:docx和pyPDF2,处理word和pdf文档
信息传输:使用Python发送邮件/微信/短信
比如:批量更新excel表格的信息,自动定时发送邮件等
Python就是一个能够帮人们实现需求的工具,它更像是一把万能钥匙,决定用它来打开哪一扇门的,是编写它的主人。
Python基础语法知识就好比『内功』,只有深厚的『内功』才能更好地领悟和掌握各路招式。
下面是一段已经写好的代码,直接在本地【运行】。
import requests
from aip import AipOcr
image = requests.get('https://res.pandateacher.com/python_classic.png').content
APP_ID = '16149264'
API_KEY = 'yxYg9r4OuAs4fYvfcl8tqCYd'
SECRET_KEY = 'yWg3KMds2muFsWs7MBSSFcgMQl8Wng4s'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
res = client.basicGeneral(image)
if 'words_result' in res.keys():
for item in res['words_result']:
print(item['words'])
else:
APP_ID = '11756541'
API_KEY = '2YhkLuyQGljPUYnmi1CFgxOP'
SECRET_KEY = '4rrHe2BF828bI8bQy6bLlx1MelXqa8Z7'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
res = client.basicGeneral(image)
if 'words_result' in res.keys():
for item in res['words_result']:
print(item['words'])
else:
print(res)
终端打印
优美胜于丑陋
明了胜于晦涩
简洁胜于复杂
复杂胜于凌乱
扁平胜于嵌套
间隔胜于紧湊
已经看到了,机器能精准地识别图片中的文字,这就能通过Python帮计算机做到的:图像识别,让计算机拥有“眼睛”,看懂图片。
图像识别是人工智能领域的一个应用。下面再来一个更厉害的例子:真正地运行一个人工智能小程序,和计算机进行“对话”。它其实就是Python码出来的Siri。
import urllib.parse
import hashlib
import time
import random
import string
import requests
import sys
import readline
def curl_md5(src):
m = hashlib.md5(src.encode('UTF-8'))
# 将得到的MD5值所有字符转换成大写
return m.hexdigest().upper()
"""
get_req_sign :根据 接口请求参数 和 应用密钥 计算 请求签名
参数说明
-pa:接口请求参数
-apk:应用密钥
返回数据
-签名结果
"""
def get_req_sign(pa, apk):
# 1.字典升序排序
pa_list = list(pa.items())
pa_list.sort()
# 2.拼按URL键值对
tem_str = ''
for i in range(len(pa_list)):
if pa_list[i][1]:
tem_str += (pa_list[i][0] + '=' + urllib.parse.quote(pa_list[i][1]) + '&')
# 3.拼接app_key
tem_str += ('app_key=' + apk)
# 4.MD5运算 + 转换大写,得到请求签名
sign = curl_md5(tem_str)
return sign
def get_params(plus_item):
# 请求时间戳(秒级),用于防止请求重放(保证签名5分钟有效)
t = time.time()
time_stamp = str(int(t))
# 请求随机字符串,用于保证签名不可预测
nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 10))
global se
app_id = '2127007340'
app_key = '9Fm2D9tkB4lEjZ89'
params = {
'app_id': app_id,
'time_stamp': time_stamp,
'nonce_str': nonce_str,
'question': plus_item,
'sign': '',
'session': se
}
params['sign'] = get_req_sign(params, app_key)
return params
def get_content(plus_item):
# 聊天的API地址
url = "https://api.ai.qq.com/fcgi-bin/nlp/nlp_textchat"
# 获取请求参数
plus_item = plus_item.encode('UTF-8')
payload = get_params(plus_item)
r = requests.post(url, data=payload)
if r.json()["ret"] == 0:
print('大白:' + r.json()["data"]["answer"])
else:
print('今天我出了一点小问题~快联系度娘帮忙解决一下~~')
sys.exit()
feature_text = ['''
大家好!我是你的聊天机器人大白。
我有问必答,有人会问我“今天北京天气怎么样?”,也有人问我“你喜欢我吗?”
快来问我问题呀,欢迎来撩!
>''', '''
再来问我点啥吧!我把我知道的都告诉你,嘻嘻!
>''', '''
# 我有点饿了,再和你聊完最后一句,我就要下线啦!你还有什么要问我的?
# >''']
se = str(random.randint(1, 10000))
for i in range(len(feature_text)):
comment = input(feature_text[i])
get_content(comment)
time.sleep(1)
print('\n我走啦,下次见!')
大家好!我是你的聊天机器人大白。
我有问必答,有人会问我“今天北京天气怎么样?”,也有人问我“你喜欢我吗?”
快来问我问题呀,欢迎来撩!
>北京怎么样啊?
>大白:首都大城市再来问我点啥吧!我把我知道的都告诉你,嘻嘻!
>我长得怎么样?
>大白:我猜应该不错# 我有点饿了,再和你聊完最后一句,我就要下线啦!你还有什么要问我的?
>我不想和你聊了
>大白:那就关掉呗# 我有点饿了,再和你聊完最后一句,我就要下线啦!你还有什么要问我的?
# >赶紧下线吧
大白:好的,那我下啦。我走啦,下次见!
恭喜已经步入了python新世界,使用print()开启对python的第一声问候!print()函数的用法有以下几种:单枪匹马——不带引号、搭配单引号、搭配双引号、搭配三引号,我们逐个见识下吧!
无引号
将**print(520)**这段代码一字不差地抄写在第3行,抄写完后,点击【运行】按钮。
注意,在正式敲代码之前,必须切换成英文输入状态,保证print()函数的括号是用【英文括号】,不然会报错😢。【切换英文输入的Tips:Mac系统请按command+空格键切换中英文输入,Windows系统请按ctrl+shift键切换中英文输入】
import time
print ('在'+time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+',我写了人生中第一行Python代码\n它的内容虽然简单,不过是平凡的一句print(520)\n但我知道:我的编程之路,将从最简单的520开始\n在我点击运行的同时,一切在这一刻起开始变得不同\n以下,是这行代码的运算结果:' )
print(520)
在2020-05-24 10:40:26,我写了人生中第一行Python代码
它的内容虽然简单,不过是平凡的一句print(520)
但我知道:我的编程之路,将从最简单的520开始
在我点击运行的同时,一切在这一刻起开始变得不同
以下,是这行代码的运算结果:
520
已经能够实现与计算机交互的“初体验”,离不开print()函数的帮忙。这也是即将解锁的第一个Python语法知识点。
刚才,虽然只是输入了一个简单的print,但在背后,这段Python代码却帮你做了这样的一些事情:
(0)向计算机发出指令:“打印‘520’”;
(1)Python把这行代码编译成计算机能听懂的机器语言;
(2)计算机做出相应的执行;
(3)最后把打印结果呈现在眼前。
通过Python这个工具,成功与计算机实现沟通的方式。
在Python的魔法世界,如果想让计算机帮忙写出自己的名字,该怎么运用print()函数对计算机发出指令呢?
print('小迪')
小迪
看,屏幕上是不是出现了自己的名字?这就是print()函数的主要功能:打印内容。
在这里,打印的意思是:让计算机把你给它的指令结果,显示在屏幕的终端上。
单引号的用法
到这里,已经亲自使用过两次print()函数了。来观察一下,两次写下的print()函数语句有什么不一样的地方呢?
print(520)
print('小迪')
很明显,在print(‘小迪’)里,多了一对单引号。【注意⚠️:单引号是英文输入法下的单引号!】
那么问题又来了:这个单引号是干啥用的?为什么打印文字的时候需要加上引号呢?
这是因为,计算机的脑回路比较特别:只能理解数字,却读不懂文字。因为数字和数学运算是标准化、有固定格式的,而文字却能够千变万化。
如果直接让计算机print(千寻),它会一脸懵并大声报错:“这两个字啥意思,你没有定义清楚,不懂诶……”
这便是print()函数中引号的用法:当括号内有引号的时候,就相当于告诉计算机——你不需要执行多余的操作,我输入什么,你就打印什么。
双引号的用法
在print()函数内不仅能使用单引号,还能使用双引号,两者的效果没什么区别,都能让你打印出一行文本。【注意⚠️:双引号是英文输入法下的双引号,而不是两个单引号!】
有些时候,单引号和双引号可能会在括号内同时出现,比如print(“Let’s play”)。
这种情况下,需要注意区分清楚哪个引号是属于print()函数结构,哪个引号是属于要让计算机打印的内容,可别“混搭”了。
说这么多,运行一下代码就懂了。直接在下面代码框中点击运行,观察运行结果。(点击运行前先思考一下,在第三个print()函数中,哪个引号才属于print()函数结构)
# 括号内是单引号的情况。
print('一起玩吧')
# 括号内是双引号的情况。
print("一起玩吧")
# 括号内单双引号同时存在的情况。
print("Let's play")
一起玩吧
一起玩吧
Let’s play
观察上面的代码,发现多了一些带有『#』的语句,它是怎么一回事呢?
其实呀在python里,『#』常用作单行注释符号,用于解释单行代码,比如 『# 括号内是单引号的情况』用于解释说明代码『print(‘一起玩吧’)』。#号后边的任何数据在代码运行的阶段不会被输出。
回到print()函数,在print("Let's play")
中,没有被打印出来的引号就属于print()函数结构啦。
不过,在print()函数中,引号里的内容其实也不一定非得是文字,还可以是英文和数字。相应地,在括号内没有引号的情况下,应该往括号内放入计算机能够“理解”的内容,如:数字或数学运算。此时,print函数会让计算机尝试去“读懂”括号里的内容,并打印最终的结果。因此,当计算机读懂数据数字后,就打印这个数据。当读懂数字运算后,则打印得到运算结果。如print(1+1)
是计算机能直接读懂的数学运算,所以,它会直接打印出最终的运算结果:“2”。这就是计算机“读懂内容”的表现。
三引号的用法
如果希望能让文字的每一个逗号后面都换行显示,打印出“自动换行”的效果。
答案是:在print内部使用三引号'''
来实现跨行输出。【注意⚠️:三引号是英文输入法下的三个单引号!】除了单引号和双引号之外,print()里面居然还能放三引号,直接运行下面这段代码。
print('''我愿意留在汤婆婆的澡堂里工作两年,
第一年在锅炉房和锅炉爷爷一起烧锅炉水,
将在这个世界变成一头猪。
''')
bash:144$ python ~/classroom/apps-1-id-5cd9765519bbcf0001554795/144/main.py
我愿意留在汤婆婆的澡堂里工作两年,
第一年在锅炉房和锅炉爷爷一起烧锅炉水,
将在这个世界变成一头猪。
现在已经学习了print()函数的四种情况--无引号,单引号,双引号,三引号。巩固一下。
注意,【前方高能预警】,一个99%的初学者都踩过的代码bug。在Python中,默认所有正确的语法,包括标点符号都是【英文】。不小心用了中文标点的话,计算机会无法识别,然后报错。在终端里,能看到的最常见的符号报错提示就是【syntaxError:invalid syntax】(语法错误:无效语法)。
在debug(解决程序报错)的时候,需要下意识地找找是否犯了这样细小却致命的错误。
转义字符
其实之前的换行案例,还有第二种实现换行的办法:使用转义字符\n
,像这样:
print('我愿意留在汤婆婆的澡堂里工作两年,\n如果我违背工作内容的话,\n将在这个世界变成一头猪。')
除了\n
之外,转义字符还有很多,它们的特征就是:反斜杠+想要实现的转义功能首字母。比如换行\n
代表【+newline】;退格\b
代表【+backspace】;回车\r代表【+return】。小迪把常用的一些转义字符做了个总结:
变量和赋值
name='千寻'
这就是一个常见的“给变量赋值”的动作。在这里,name就是一个变量,这行代码的意思,就是把“千寻”这两个字【赋值】给了“name”这个【变量】。这就好比,为了在日后能在计算机中更方便地找到她的名字,我们帮她把名字收纳进了一个小盒子里,并在这个盒子上贴了个叫“name”的标签。回想一下,平时在收拾东西的时候,是不是会把散落各处东西放进不同的盒子里,并且做好标记?这样的“收纳”动作,能够让空间变得整齐,也更方便我们自己取用东西。
同理,计算机也是这么做的,它会把成千上万的数据放在不同的“盒子”里,这样才方便它存储和操作数据。这个“盒子”在Python中被称为变量,在这个“盒子”里放任何想放的内容。而这个往盒子里装东西的过程,在代码的魔法世界被称为【赋值】。
name='千寻'
name='小千'
print(name)
小千
终端上出现的结果是不是【小千】?可这又是为什么呢?对“name”这个变量第一次的赋值不是【‘千寻’】吗?为什么打印的结果是第二次的赋值呢?
这就涉及到了变量的特点:变量之所以称为变量,是因为它保存的数据是可以随意变化的。可以将变量当作一个盒子,可以在这个盒子里放任何内容,但盒子都有它的最大容量,不能无限制地塞东西。偏偏在代码世界里,盒子的容量又特别小,仅为1。所以当你需要放进新的东西时,只能寻找一个新的盒子。
在上面的案例中,第一行代码:name='千寻'
表达的意思是:把千寻这个名字放到name这个变量“盒子”中。由于,计算机是一行行自上而下执行代码的,所以当运行到第二行代码name='小千'
时,变量“name”里存储的【‘千寻’】就被替换成了【‘小千’】。所以,当运行到第三行print(name)
时,打印出的结果,就自然而然的是小千了。其实,不仅是千寻,名字对于每个人来讲都是有意义的,它帮助你“定位”自己,让别人能轻松地找到你。所以,人的名字不能乱取,同理,给变量的命名也需要遵循一定的规范。
变量的命名规范
对于变量的命名,可以遵循以下规范:
比如说,如果信息是姓名,那么变量可以命名为name;如果信息是数字,那么变量名则应该叫做number。很多新手在刚入门的时候会习惯给变量命名为a、b、c等英文字母。这样的变量名会让你无法从诸多信息中分辨出变量里装的东西是什么,这无异于给自己的孩子取名叫做“张小红”、“王小明”,一下就淹没于茫茫人海之中了。
除了变量命名之外,还要注意的是:在代码世界中,赋值符号=
不是左边等于右边的意思。仅仅表示赋值动作:把右边的内容放到了左边的盒子中。代表左右两边相等的符号,是比较运算符==
,虽然他俩长得像,但代表的却是完全不同的意思,可千万不要搞混了。
虽然print()函数是最简单的语句,但其实,往后要做的任何一个程序几乎都离不开print()函数的支持。例如说,能用print()函数给自己创造一个可爱的好朋友“人工智障小埋”,她会蹦跶着到你面前,调皮地让你猜她的年龄。
注意:在小埋问你她的年龄时,要记得在【终端】输入你猜的数字哦。
import random
import time
###提示语部分
print('你好,我是机器人小埋,我们来玩个猜年龄的小游戏吧~(◆◡◆)')
time.sleep(2)
print('''
=============================
=============================
''')
time.sleep(1)
print('小埋的真实年龄在1到10之间哦~')
time.sleep(1)
print('不过,你只有5次机会哦~')
time.sleep(1)
print('下面,请输入小埋的年龄吧:')
#从0至10产生一个随机整数,并赋值给变量age
age = random.randint(1,10)
#设置次数
for guess in range(1,6):
#输入玩家猜测的年龄
choice=int(input())
#判读玩家输入的年龄是否等于正确的年龄
if choice<age:
print('小埋的提示:你猜小了(;´д`)ゞ。。。。')
elif choice>age:
print('小埋的提示:乃猜大了惹(>﹏<)~~')
else:
print('猜了'+str(guess)+'次,你就猜对惹~hiu(^_^A;)~~~')
break
#判断猜测次数
if choice == age:
print('搜噶~那么小埋下线了~拜拜~( ̄︶ ̄)↗')
else:
print('哎呀~你还是木有猜对啊~但是你只有5次机会诶~怎么办啊~')
print('那好吧~心软的小埋只好告诉你,我才'+str(age)+'岁哦~(*/ω\*)')
你好,我是机器人小埋,我们来玩个猜年龄的小游戏吧~(◆◡◆)
=============================
=============================
小埋的真实年龄在1到10之间哦~
不过,你只有5次机会哦~
下面,请输入小埋的年龄吧:
5
小埋的提示:你猜小了(;´д`)ゞ。。。。
8
小埋的提示:你猜小了(;´д`)ゞ。。。。
9
猜了3次,你就猜对惹~hiu(_A;)~~~
搜噶~那么小埋下线了~拜拜~( ̄︶ ̄)↗
除了print()函数和变量赋值之外,这段代码里还用到了条件判断if语句、input()函数,这两个知识点我们会在后面学习到。而这一关卡里,大家掌握了命令思维——对计算机下“打印”的指令。但是,在与计算机沟通的道路上,我们的学习才刚刚开始。
下关预告
其实,Python世界只是现实世界的镜像,Python世界里的东西都可以在现实世界里找到对应。那么现实世界中最常见的数字,文字在镜像世界里长什么样呢?如何使用它们?
比如说,如何利用镜像世界的数据进行复杂的科学计算,并把数字结果和解释语言一起输出到屏幕,展现给用户呢?
后面,小迪会一同深入镜像世界里探其究竟,揭秘【镜像世界的数据】。
Demo
例子:打印
介绍:
除了文字和数字之外,还可以灵活运用print()函数,打印出带特殊格式的东西
へ /|
/\7 ∠_/
/ │ / /
│ Z _,< / /`ヽ
│ ヽ / 〉
Y ` / /
イ● 、 ● ⊂⊃〈 /
() へ | \〈
>ー 、_ ィ │ //
/ へ / ノ<| \\
ヽ_ノ (_/ │//
7 |/
>―r ̄ ̄`ー―_
print(""" へ /|
/\7 ∠_/
/ │ / /
│ Z _,< / /`ヽ
│ ヽ / 〉
Y ` / /
イ● 、 ● ⊂⊃〈 /
() へ | \〈
>ー 、_ ィ │ //
/ へ / ノ<| \\
ヽ_ノ (_/ │//
7 |/
>―r ̄ ̄`ー―_""");
例子:转义字符
要求:
运用转义字符按照如下格式打印出来。其中,具体文字会在【书写代码】
步骤中直接提供。
'Python’是一种计算机程序设计语言。
你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的JavaScript语言等等。
那’Python’是一种什么语言?
参考:
方法一:
1.根据题目可知,本题需要运用三个知识点:换行,运用转义字符将单引号打印出来,打印函数。
2.换行\n
3.转义引号\'
4.打印函数print()
【提示】
请注意是反斜杠\
,并且反斜杠在前。
方法二:
直接使用三引号,打印出内容里的单引号并且实现换行
print("""'Python'是一种计算机程序设计语言。
你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的JavaScript语言等等。
那'Python'是一种什么语言?""")
print("\n\'Python\'是一种计算机程序设计语言。\n
你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java\n语言,适合初学者的Basic语言,适合网页编程的JavaScript语言等等。
那\'Python\'是一种什么语言?\n")
(后续待补充)