Python学习之路第一篇-Python简介和基础入门

1、Python简介

1.1 Python是什么

Python是近年来编程界最火的热点,没有之一。从性质讲它与我们熟悉的C/C++、Java、PHP等没有什么本质的区别,也是一种开发语言,而且已经进入主流的二十种开发语言中的Top5。

1.2 Python的由来和发展趋势

1989年,吉多·范罗苏姆(Guido van
Rossum)在阿姆斯特丹为了打发无聊的圣诞节,决心开发一个新的脚本解释程序,他希望这个新的叫做Python的余元能够符合他的理想:创造一种C和shell之间功能全面、易学易用、可以扩展的语言。

1991年,第一个Python编译器诞生,基于C语言实现,并能够调用C语言的库文件。后面经历版本的不断革新换代,2004年的2.4版本诞生了目前最流行的WEB框架Django,六年后Python发展到2.7版本,这是目前为止2.x版本中最新且较为广泛使用的版本。

2.7版本的诞生不同于以往2.x版本的垂直换代逻辑,它是2.x版本和3.x版本之间过渡的一个桥梁,以便最大程度上继承3.x版本的新特性,同时尽量保持对2.x版本的兼容性。
此3.x在2.7版本之前就已问世,从2008年的3.0版本开始,Pythone3.x系呈迅猛发展之势,版本更新活跃,一直发展到现在最新的3.7版本。

Python2 VS Python3
许多初学者会纠结于从2.x版本还是从3.x版本开始Python的学习。这里简要对比下两者的差异:
1、3.x库中print是函数,使用起来更加方便(PRINT IS FUNCTION)
2、3.x版本默认使用UNICODE编码,解决了从前常见的中文乱码问题
3、3.x版本中某些库被改了名,具体的在后续学习中深入展开
4、目前3.x版本还不能完全支持Twisted module(网络框架),这恐怕是3.x版本中最大的遗憾。
官方宣布2020年之后不再支持2.x系列中使用最多的2.7版本,所以初学者建议从3.x开始学习。

1.4 Python的优缺点

优点
1、优雅、明确、简单:这是Python的定位,使得Python程序看上去简单易懂,初学者容易入门,学习成本更低。但随着学习的不断深入,Python一样可以胜任复杂场景的开发需求。引用一个说法:Python的哲学就是简单优雅,尽量写容易看明白的代码,尽量少些代码。
2、开发效率高:Python作为一门高级语言,具有丰富的第三方库,官方库中也有相应的功能模块支持,覆盖了网络、文件、GUI、数据库、文本等大量内容。因此开发者无需事必躬亲,遇到主流的功能需求时可以直接调用,在基础库的基础上施展拳脚,可以节省很多功夫和时间成本,大大降低开发周期。
3、无需关注细节:Python作为一种高级语言,在编程时无需关注底层细节(如内存管理等)
4、功能强大:Python是一种前端后端通吃的综合性语言,功能强大,PHP能胜任的角色它都能做。至于后端如何胜任,需要在后续的学习中逐步领悟。
5、可移植性:Python可以在多种主流的平台上运行,开发程序时只要绕开对系统瓶体的依赖性,就可以在无需修改的前提下运行在多种系统平台上。其他优点有待继续发掘。
缺点:
1、代码运行速度慢:因为Python是一种高级语言,不像C语言一样可以深入底层硬件最大程度上榨取硬件的性能,因此它的运行速度要远远慢于C语言。另外一个原因是,Python是解释型语言,我们的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程比较耗时,所以很慢。而C程序时运行前直接编译成CPU能够执行的机器码,所以非常快。
需要注意的是,这种慢对于不需要追求硬件高性能的应用场合来说,根本不是问题。因为他们比较的数量级并不是用户能够直观感受到的(比如开发一个网络下载器,C程序的运行时间需要0.001秒,而Python程序的运行时间需要0.1秒,慢了100倍,但由于网络的延时更慢,需要等待1秒,用户的体验几乎没有差别,除非使用精确的计时器来计时)。
2、发布程序时必须公开源码:还是因为Python是一门解释型语言,没有编译打包的过程(据说最新的Python可以打包,但本质上还是把源代码和解释器打在一起,没有太大的实际意义)。这个缺点仅限于我们想单纯靠卖开发出来的软件产品挣钱的时候。但在当前这个互联网时代,不靠卖产品本身来赚钱的商业模式越来越主流了,所以这已经不是什么大问题了。

1.5 Python的适用领域

1、云计算开发:云计算领域最火的语言,典型代表OpenStack
2、WEB开发:众多优秀的WEB框架、众多优秀的WEB站点(YouTube、Instagram、豆瓣等)均基于Python开发
3、系统运维:各种自动化工具的开发,CMDB、监控告警系统、堡垒机、配置管理&批量分发工具等均可以搞定
4、科学计算、人工智能:围棋大战的谷歌阿尔法狗部分功能使用了Python
5、图形GUI:暂缺大型应用
6、网络爬虫:这年头网络爬虫无处不在,很多都是基于Python开发,包括谷歌的爬虫,估计这是爬虫工程师的必备工具吧。

1.6 哪些地方在使用Python

来自几个现货的知名公司应用案例:
谷歌:Google app engine、google earth、爬虫、广告等
YouTube:世界最大的在线视频网站基于Python开发 Instagram:美国最大的图片分享网站,全部基于Python开发
Facebook:大量的基础库基于Python开发 Redhat:yum包管理工具基于Python开发
国内知名互联网公司的应用:豆瓣、知乎网站、主流互联网公司如阿里、腾讯、百度、金山、搜狐、盛大、网易。。。等通过Python来完成各种任务
2、Python基础

2.1 编程开发规范

1、代码开头:Python中代码必须顶格书写,除非被作为语句嵌套在条件判断或循环结构中
2、代码层级:代码与代码之间的逻辑层级关系通过空格来界定,第一层顶格书写,第二层开头预留4个空格(如果不考虑跨平台可使用tab)
3、对齐方式:同一个层级的代码必须严格对齐,如第一层都是顶格,第二层都是4个空格开头,第三层则是8个空格,以此类推。
4、注释:单行注释用#开头,单独一行作为注释或在代码后面通过#跟上注释均可,多行注释在首尾处用成对的三引号引用即可,可以是成对的三引号或者三个双引号
5、代码块:目前来看if逻辑判断和for循环条件后面均以冒号结尾,然后通过4个空格开始下一层级的实际执行动作语句编写。这部分在冒号后面接上的语句称为代码块
6、程序命名:编写的Python程序文件必须以.py结尾
7、项目规范:启动一个项目开发时现在开发工具中创建工程(project),然后根据需要创建目录,最后在目录下创建当前活动的py程序

2.2 变量

Python中的变量也用于存储临时值以便后续灵活调用,在定义时只能使用字母、数字、下划线的任意组合,且不能以数字开头,不能以Python内置的关键字来命名变量(如and, import, global, finally等)。对变量进行字符串类型的赋值时,字符串需要用成对的引号引起来,单双、三引号都可以。
建议使用以下两种形式来定义较为复杂的变量,便于阅读:
1、驼峰:即每个单词的首字母大写,其他小写,如HeroName
2、下划线:不同单词之间通过下划线分开:hero_name

2.3 字符编码

字符编码经历了ASCII码 -> Unicode -> UTF-8的演变过程,Python2默认使用ASCII编码,而3.x默认使用UTF-8编码。由于编码问题事关重大,因此强烈建议统一使用万能的UTF-8编码:
在程序的开头明确显式定义:

 #!/usr/bin/env python
    #-*- coding: utf-8 -*-

Windows下编程可以省略第一行,但为了保留移植性建议始终声明变量
虽然Python3.x默认使用UTF-8编码,但还是建议在程序中声明编码格式

以上是结果,下面谈谈为什么强烈建议使用urf-8编码,以及为什么utf-8编码就可以通吃。
众所周知计算机是美国人发明的,因此最早就只有包括所有字母的大小写、数字、必要的特殊符号等合计才127个字符被编码到计算机里,这个编码就是ASCII编码。由于需要进行编码的字符才有127个,因此用7个二进制位就足以搞定了,但8个二进制位才能构成一个完整的字节,因此索性用8个二进制位来进行编码,剩余的一位只好浪费掉。所以ASCCI码只占用一个字符。
随着计算机技术的推广和普及,其他不以英语为官方语言的国家也开始使用计算机了。那么现在问题来了,一个字节的8个bit位只能表示非常有限的字符(设计时只包括所有字母的大小写、数字、必要的特殊符号,其中整数还不能超过255),既有的ASCII编码表里没有包含其他国家的语言字符,但显然也没法强迫全球都使用英语,于是各个国家开始进行本土化改良,设计能满足自己国家需要的编码,如国内的GB2312。这里的改良涉及两个要点,一是原有的一个字节的编码空间要扩充为两个字节甚至更多,二是新的编码还不能与既有的ASCII编码冲突,否则老美要跟你捉急了!你可以想象,中国搞定了一套,日本也搞定了一套,接着是韩国、越南等巴拉巴拉,大家都有自己的编码标准,各自为政,遇到多语言混合使用的场景这编码表还不炸开锅,连同计算机一起傻掉!这时Unicode应运而生。Unicode把所有语言都统一到一套编码里,用两个甚至更多的字节来进行编码(通常用两个字节,搞不定时再喊人加砝码呀),这样就不会再有乱码问题了。
Unicode搞定了多国语言乱码和编码统一的问题,但你会发现如果需要处理的内容全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就不太经济划算。OK,Unicode的演进改良版utf-8就是来解决这个问题的。utf-8的优势在于它使用“可变长编码”,在继续沿用ASCII编码基础上来对1个字节不能搞定的那些语言字符进行编码设计,这样英文还是用1个字节,遇到中文就用3个或者更多的字节来处理。这样既可以保障空间和性能的最大化,还能兼顾老美的老巢和其他非英文的编码兼容问题,一举三得!所以你会发现ASCII其实是utf-8的子集,utf-8向下兼容。

2.4 Python解释器

Python是一门解释性语言,自然不能缺了解释器(类似于JVM)。官方支持Cpython、Jpython、Ironpython和pypy等,默认使用基于C语言实现的CPython。它也是使用最广泛的解释器。

CPython:是用C语言实现Pyhon,是目前应用最广泛的解释器。最新的语言特性都是在这个上面先实现,基本包含了所有第三方库支持,但是CPython有几个缺陷,一是全局锁使Python在多线程效能上表现不佳,二是CPython无法支持JIT(即时编译),导致其执行速度不及Java和Javascipt等语言。于是出现了Pypy。

Pypy:是用Python自身实现的解释器。针对CPython的缺点进行了各方面的改良,性能得到很大的提升。最重要的一点就是Pypy集成了JIT。但是,Pypy无法支持官方的C/Python
API,导致无法使用例如Numpy,Scipy等重要的第三方库。这也是现在Pypy没有被广泛使用的原因吧。

而PyPy与CPython的不同在于,别的一些python实现如CPython是使用解释执行的方式,这样的实现方式在性能上是很凄惨的。而PyPy使用了JIT(即时编译)技术,在性能上得到了提升。

Python的解释器:

1、由于Python是动态编译的语言,和C/C++、Java或者Kotlin等静态语言不同,它是在运行时一句一句代码地边编译边执行的,而Java是提前将高级语言编译成了JVM字节码,运行时直接通过JVM和机器打交道,所以进行密集计算时运行速度远高于动态编译语言。

2、PyPy,它使用了JIT(即时编译)技术,混合了动态编译和静态编译的特性,仍然是一句一句编译源代码,但是会将翻译过的代码缓存起来以降低性能损耗。相对于静态编译代码,即时编译的代码可以处理延迟绑定并增强安全性。绝大部分
Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的。

2.5 构建Python的开发环境

构建好包括解释器(虚拟机)和开发工具IDE在内的Python开发环境才便于展开程序开发之旅。
解释器(虚拟机)从Python官方下载安装即可,Windows下安装后需要把Python下bin目录和script目录追加到系统环境变量path中。
真实开发建议使用pycharm工具,需要注意的是选择本地的解释器和项目的默认字符编码。

2.6 模块初识

Python内置了很多模块,同时也可以自定义编写一些好玩的模块,使用模块时需要通过关键字import导入。导入后Python会从系统变量的路径中从前往后一次性查找,首次成功查找匹配后不再进行后续查找。
因此如果需要使用自定义模块,需要特别关注自定义模块的存放位置,底线是只存放在系统变量的一个路径下,否则可能得到以外的结果

2.7 用户输入和格式化输出

用户输入通过input来实现,示例:

hero_name = input("请输入英雄的名称:")
print("Hi,", hero_name)
注意:
13.x版本中input默认接收用户输入的类型为字符串,如果需要使用其他数据类型需要类型转换:
    age = int(input("请输入年龄:"))
2print输出中可以使用转义符号反斜线\来实现更多的显示效果,如\n表示换行,\t为制表符

字符串的格式化输出
Python中对字符串的格式化输出与C语言相同,借助%来实现:%s表示字符串;%d表示整数;%f表示浮点数;如果输出的字符串中本身需要%,那么需要使用两个连续的%%来输出一个%。

#!/usr/bin/env python
#! -*- coding: utf-8 -*-
print("英雄的名称为%s" %"八神庵")
print("您的年龄是:%d" %18)
print("英雄的名称为%s, 年龄是%d" %("草薙京"24))

从上面的示例可以看出,利用print进行格式化输出的基本格式是在需要替换输出的位置用%s,%d等占位符,然后在后面通过%来接上实际替换后需要输出的内容。如果需要替换输出的元素不止一个,则需要在%后面通过一对圆括号把实际替换后需要输出的内容包含进来,同时在每个元素之间用逗号隔开。

2.8 Python的运行逻辑

内存加载代码 -> 语法分析 -> 解释器加载 -> 生成字节码 -> 执行字节码 -> 生成机器码 -> CPU执行

3、开始我们的Python开发之旅

3.1 第一个Python程序

#!/usr/bin/env python
#! -*- coding: utf-8 -*-
print("Hello World!")

执行结果:

“C:\Program Files\Python35\python.exe” D:/python/Day1/test/HelloWorld.py
Hello world!
Process finished with exit code 0

3.2 if-else判断
3.2.1 if-else语法规范

if condition1:
    command_layer1_1
    if condition2:
        command_layer2_2
    else:
        command_layer2_2
else:
    command_layer1_2

3.2.2 示例程序

#!/usr/bin/env python
#! -*- coding:utf-8 -*-
user_input = input("请输入用户名:")
if user_input == "admin":
    pass_input = input("请输入密码:")
    if pass_input == "password":
        print("登录成功,欢迎回来:%s" %(user_input))
    else:
        print("错误的用户名或密码,登录失败!")
else:
    print("错误的用户名或密码,登录失败!")

改良版:

#!/usr/bin/env python
#! -*- coding:utf-8 -*-
username = input("请输入用户名:\n")
password = input("请输入密码:\n")
if username == "admin" and password == "password":
    print("登录成功,欢迎回来:%s" %username)
else:
    print("登录失败!")

3.2.3 if-elif-else扩展
语法结构:

if condition1:
    statement1
elif condition2:
    statement2
elif condition3:
    statement3
else condition4:
    statement4

示例程序:

#!/usr/bin/env python
#! -*- coding:utf-8 -*-
age = input("请输入年龄:")
if age >= 18:
    print("已成年!\n")
elif age >= 6:
    print("未成年!\n")
else:
    print("儿童!\n")

3.3 for循环
3.3.1 for循环语法规范

for variable in list:
    loop command

variable表示变量,一般程序中使用i, j等,list表示变化的范围,可以是list列表,一般会考虑使用range函数来表示一个整数序列,如range(5)就表示[0, 5)之间的整数序列。语法规范中同样需要for语句后面的结尾冒号,以及循环体中的4个空格左缩进。

3.3.2 猜数游戏

通过系统生成一个随机数作为预设年龄,对用户提供3次猜测的机会,前两次如果没有猜中给出数字范围大小的提示,如果第3次还没有猜中则给与鼓励提示,同时打印出这个预设的数字,三次当中没有任何一次猜中会给予用户提示。

#!/usr/bin/env python
#! -*- coding:utf-8 -*-
import random               #导入随机数模块
age = random.randrange(10)  #随机生成[0, 9]之间的整数并赋值给变量age
for i in range(3):
    if i < 2:
        guess_num = int(input("猜一猜大黄的年龄:"))
        if guess_num > age:
            print("大了!\n")
        elif guess_num < age:
            print("小了!\n")
        else:
            print("恭喜,猜中了!\n")
            break;           #跳出循环
    else:
        guess_num = int(input("最后一次机会哦:"))
        if guess_num == age:
            print("恭喜,猜对了!\n")
        else:
            print("真是不幸运,3次机会已用完。大黄的年龄是:%d\n" %age)

注意:
1、为了便于程序调试可以为age赋一个固定数字做初值
下面进行程序的改进,当用户连续三次猜错后继续给机会,让用户选择继续猜还是直接退出,如果继续则再获得三次猜的机会:

#!/usr/bin/env python
#! -*- coding:utf-8 -*-
age = 24            #年龄初值24
count = 0           #计数器,初值为0
for i in range(10):
    if count < 3:
        guess_num = int(input("请输入猜测的数字:"))
        if guess_num == age:
            print("恭喜,猜对了!\n")
            break;
        elif guess_num > age:
            print("大了!\n")
        else:
            print("小了!\n")
        count += 1
    elif count == 3:
        continue_flag = input("是否继续玩耍(Y/N):")
        if continue_flag.lower() == "y":
            count = 0
        else:
            print("游戏结束!\n")
            break
    else:
        print("尝试次数过多,游戏强制退出!\n")

也可以使用while循环:

count = 0
while count < 10:
    # ..........
    count += 1

小结

1、Python是一门主流且发展迅猛的开发语言,目前存在2.x和3.x两个版本分支,前端后端都能胜任,功能强大,在互联网公司中应用广泛,值的托付;
2、Python开发需要安装解释器和IDE,建议使用Pycharm。2.x和3.x下的默认字符编码不同,推荐使用utf-8编码,包括程序编码和解释的编码两个层面;
3、系统自带模块和自定编写的模块均可以通过import导入使用;
4、在进行Python开发时,注意代码需要分层体现,第一层顶格编写,第二层左缩进4个空格;
5、input函数用于接收用户输入,默认输入的数据类型是字符串,可以通过int关键字转换为整数。print()函数可以进行简单输出,如果要格式化需要使用%s,%d,%f等来实现;
6、流程控制语句if-else判断和for、while循环都需要注意代码书写格式,流程控制语句关键字必须以冒号结尾,各层级之间需要使用4个空格缩进;
7、continue和break可以分别用于退出当前流程控制和整个循环。

安装遇到问题,可加老九君个人QQ:614940318,请备注来自CSDN
老九学堂免费C、C++、Java课程地址: https://study.163.com/courses-search?keyword=老九学堂

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《零基础入门学习Python》(第一版)课后习题的主要目的是帮助学生巩固所学的Python基础知识,并提供一些实践机会来应用这些知识。 第一部分的习题主要集中在Python的基本语法和数据类型上。学生需要编写并运行一些小程序来理解变量、条件语句、循环和函数等基本概念。这些习题旨在让学生对Python基础知识有一个更深入的理解,并提供一些运用这些知识的机会。 第二部分的习题涉及列表、元组和字典等复杂数据类型。学生需要编写程序来操作这些数据类型,并解决一些与它们相关的问题。这部分习题的目的是帮助学生熟练掌握这些数据类型的使用方法,并学会将它们应用到实际的编程任务中。 第三部分的习题涵盖了文件操作、异常处理和模块导入等主题。学生需要编写程序来读写文件、处理错误以及使用Python的标准库中的模块。这些习题的目的是让学生了解一些高级的编程概念,以及如何使用Python提供的丰富功能来解决实际问题。 综上所述,《零基础入门学习Python》(第一版)课后习题通过提供一系列实践机会来帮助学生巩固所学的Python基础知识。通过完成这些习题,学生将能够更自信地应用所学的知识,并为进一步深入学习Python打下良好的基础。 ### 回答2: 《零基础入门学习Python》(第一版)是一本面向零基础学习Python的教材,课后习题是巩固知识和提高编程能力的重要环节。通过课后习题,学生能够通过实际操作和练习运用所学的Python知识,巩固学习,提高理解和应用能力。 这本教材的课后习题分为不同的难度级别,从基础到高级。每个级别都有一些具体的题目要求和指导,供学生进行编程练习。这些习题涵盖了Python的基本语法、数据类型、条件语句、循环结构、函数、列表、字典和文件操作等内容,内容全面且有针对性。 针对课后习题,有几个建议: 首先,学生可以根据自己的学习进度和课后习题的难度选择合适的习题进行练习,每道习题都应该认真对待,仔细理解题目要求,并思考解决问题的思路。 其次,可以借鉴教材中的示例代码,熟悉和运用相关的语法和知识,提高编程技术和逻辑思维。 另外,可以多与同学或者老师进行交流和讨论,共同解决问题,互相帮助和学习。 最后,可以利用互联网资源,查找相关的参考资料和练习题,丰富自己的学习内容和练习经验。 总之,课后习题是巩固学习的重要环节,是提高Python编程能力的有效途径。通过认真完成习题,可以加深对知识的理解,提高编程技巧,为今后的学习打下坚实的基础

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值