Python中如何使生成器函数来用元组返回一个字符串大写字母个数和小写字母个数?

(还在更新中…) 这篇博客花费了我的大量时间和精力,从创作到维护;若认可本篇博客,希望给一个点赞、收藏

并且,遇到了什么问题,请在评论区留言,我会及时回复的


这本书对Python的知识点的描述很详细,而且排版看的很舒服

  1. 几个例题: 假装自己从零开始学,将一些有代表性、有意思的例题抽取出来
  2. 部分复习题: 遇到有意思的复习题,我会拿出来,并且进行分析
  3. 上机实践: 全部上机实践题的解题思路
    • 选择题:1、3、7、8
  • 案例研究:使用Pillow库处理图像文件
  • 案例研究:使用嵌套循环实现图像处理算法
  • 第四章 常用内置数据类型
  • 案例研究:科学计算和数据分析
  • 选择题:4、5、7、11、12
  • 例题及上机实践:2~5
  • 案例研究:21点扑克牌游戏
  • 第七章 错误和异常处理
  • 案例研究:使用调试器调试Python程序
  • 第八章 函数和函数式编程
    • 一些知识点总结和几个例题
  • 第九章 面向对象的程序设计
  • 第十一章 算法与数据结构基础
  • 第十二章 图形用户界面
    • 案例研究:简易图形用户界面计算器
  • 图形绘制模块:turtle
  • 第十四章 数值日期和时间处理
  • 第十五章 字符串和文本处理
  • 第十六章 文件和数据交换
  • 第十八章 网络编程和通信
  • 第十九章 并行计算:进程、线程和协程

通过此案例,进一步了解Python的基本概念:模块、对象、方法和函数的使用


一:编程判断某一年是否为闰年

闰年:年份能被4整除但不能被100整除,或者可以被400整除。
口诀:四年一闰,百年不闰,四百必闰

二:利用嵌套循环打印九九乘法表

三:enumerate()函数和下标元素循环示例

Python语言中的for循环直接迭代对象集合中的元素,如果需要在循环中使用索引下标访问集合元素,则可以使用内置的enumerate()函数

enumerate()函数用于将一个可遍历的数据对象(例如列表、元组或字符串)组合为一个索引序列,并返回一个可迭代对象,故在for循环当中可直接迭代下标和元素

四:zip()函数和并行循环示例

如果需要并行遍历多个可迭代对象,则可以使用Python的内置函数zip()

zip()函数将多个可迭代对象中对应的元素打包成一个个元组,然后返回一个可迭代对象。如果元素的个数不一致,则返回列表的长度与最短的对象相同。

利用运算符*还可以实现将元组解压为列表

五:map()函数和循环示例

如果需要遍历可迭代对象,并使用指定函数处理对应的元素,则可以使用Python的内置函数map()

  • func作用于seq中的每一个元素,并将所有的调用结果作为可迭代对象返回。
  • 如果func为None,该函数的作用等同于zip()函数

字符串拼接(使用了匿名函数lambda):

通过图像处理算法案例,深入了解Python数据结构和基本算法流程


一:Python内置数据类型概述

Python中一切皆为对象,而每个对象属于某个数据类型

Python的数据类型包括:

    与其他计算机语言有精度限制不同,Python中的整数位数可以为任意长度(只受限于计算机内存)。
    整型对象是不可变对象。 与其他计算机语言中的double和float对应
    Python的浮点类型的精度和系统相关 当数值字符串中包含虚部j(或J)时即复数字面量

序列数据类型表示若干有序数据.

    在Python中没有独立的字符数据类型,字符即长度为1的字符串 表示任意数据类型的序列,例如:(“z”,“g”,“h”,6,6,6)
  1. bytes(字节序列)
    表示字节(8位)序列数据
    表示可以修改的任意类型数据的序列,比如:[‘z’,‘g’,‘h’,6,6,6] 表示可以修改的字节(8位)数组

集合数据类型表示若干数据的集合,数据项目没有顺序,且不重复

字典数据类型:dict

字典数据类型用于表示键值对的字典

  1. NoneType数据类型包含唯一值None,主要用于表示空值,如没有返回值的函数的结果
  2. NotImplementedType数据类型包含唯一值NotImplemented,在进行数值运算和比较运算时,如果对象不支持,则可能返回该值

通过Python科学计算和数据分析库的安装和基本使用,了解使用Python进行科学计算的基本方法


一:Python中内置的序列数据类型

  • 元组也称为定值表,用于存储固定不变的表
  • 列表也称为表,用于存储其值可变的表
  • 字符串是包括若干字符的序列数据,支持序列数据的基本操作
  • 字节序列数据是包括若干字节的序列。Python抓取网页时返回的页面通常为utf-8编码的字节序列。

字节序列和字符串可以直接相互转换(字节编码和解码):

二:序列的切片操作示例

三:序列的连接和重复操作

  • 通过连接操作符+可以连接两个序列,形成一个新的序列对象
  • 通过重复操作符*可以重复一个序列n次
  • 连接操作符和重复操作符也支持复合赋值运算,即:+=*=

四:序列的成员关系操作

    七:使用元组字面量,tuple创建元组实例对象的实例

    如果元组中只有一个项目,后面的逗号不能省略。

    Python解释器把(1)解释为整数1,将(1,)解释为元组

    八:使用列表字面量,list创建列表实例对象的实例

    补充:列表是可变对象,故用户可以改变列表对象中元素的值,也可以通过del删除某元素

    九:列表解析表达式示例

    使用列表解析表达式可以简单,高效地处理一个可迭代对象,并生成结果列表

    选择题:4、5、7、11、12

    通过猜单词游戏的设计和实现,帮助读者了解使用Python系列数据类型和控制流程


    一:运行时提示输入密码

    输入密码时,一般需要不明显,则可以使用模块getpass,以保证用户输入的密码在控制台中不回显

    input()#为了看到输出结果。因为执行完毕后,控制台会立马关闭

    注意:上面这个代码,如果使用IDLE执行,会因为安全问题而执行失败

    但是,在控制台中执行就没问题,看输出结果(可以看到,输入的密码不会显示出来):

    二:重定向标准输出到一个文件的示例

    这种重定向由控制台完成,而与Python本身无关。

    其目的是将显示屏从标准输出中分离,并将输出文件与标准输出关联,即程序的执行结果将写入输出文件,而不是发送到显示屏中显示

    通过21点扑克牌游戏的设计和实现,了解使用Python数据类型、控制流程和输入输出


    Python语言采用结构化的异常处理机制捕获和处理异常

    而我感觉,Python在这方面的知识点其实和Java的差不多

    一:程序的错误和异常处理

    指源代码中的拼写错误,这些错误导致Python编译器无法把Python源代码转换为字节码,故也称之为编译错误

    在解释执行过程中产生的错误

    • 程序中没有导入相关的模块,NameError

    程序可以执行(程序运行本身不报错),但执行结果不正确。
    对于逻辑错误,Python解释器无能为力,需要用户根据结果来调试判断

    大部分由程序错误而产生的错误和异常一般由Python虚拟机自动抛出。另外,在程序中如果判断某种错误情况,可以创建相应的异常类的对象,并通过raise语句抛出

    在程序中的某个方法抛出异常后,Python虚拟机通过调用堆栈查找相应的异常捕获程序。如果找到匹配的异常捕获程序(即调用堆栈中的某函数使用try…except语句捕获处理),则执行相应的处理程序(try…except语句中匹配的except语句块)

    如果堆栈中没有匹配的异常捕获程序,则Python虚拟机捕获处理异常,在控制台打印出异常的错误信息和调用堆栈,并中止程序的执行

    不管异常发生与否都保证执行的语句

    except语句可以写多个,但是要注意一点:系统是自上而下匹配发生的异常,所以用户需要将带有最具体的(即派生类程度最高的)异常类的except写在前面

    三:创建自定义异常,处理应用程序中出现的负数参数的异常

    自定义异常类一般继承于Exception或其子类。自定义异常类的名称一般以Error或Exception为后缀

    用户在编写程序时,在调试阶段往往需要判断代码执行过程中变量的值等信息:

    1. 用户可以使用print()函数打印输出结果
    2. 也可以通过断点跟踪调试查看变量

    __debug__也是布尔值,Python解释器有两种:调试模式和优化模式

    了解使用Python调试器调试程序的方法


    一些知识点总结和几个例题

    Python中函数的分类:

    1. Python语言安装程序同时会安装若干标准库,例如math、random等
    2. Python社区提供了许多其它高质量的库,在下载、安装这些库后,通过import语句可以导入库
    • 函数名为有效的标识符(命名规则为全小写字母,可以使用下划线增加可阅读性,例如my_func()
    • 函数可以使用return返回值
      如果函数体中包含return语句,则返回值
      否则不返回,即返回值为空(None),无返回值的函数相当于其它编程语言中的过程

    调用函数之前程序必须先执行def语句,创建函数对象

    • 内置函数对象会自动创建
    • import导入模块时会执行模块中的def语句,创建模块中定义的函数

    一:产生副作用的函数,纯函数

    上面代码中的print_star()是一个产生副作用的函数,其副作用是向标准输出写入若干星号

    • 副作用:例如读取键盘输入,产生输出,改变系统的状态等
    • 在一般情况下,产生副作用的函数相当于其它程序设计语言中的过程,可以省略return语句

    定义计算并返回第n阶调和数(1+1/2+1/3+…+1/n)的函数,输出前n个调和数

    了解Python函数的定义和使用


    由于本文的内容太多了,导致了两个很不好的结果,
    一是:在网页中打开本篇博客的加载时间太长了,明显的卡顿很影响阅读体验;
    二是:本人在对本篇文章进行更新或者修改内容时,卡的要死。
    将本文第八章后面的很多内容拆分到新的文章中,望大家理解



    • 《Python程序设计与算法基础教程(第二版)》江红 余青松,第九章课后习题答案

    • 《Python程序设计与算法基础教程(第二版)》江红 余青松,第十章课后习题答案

    • 《Python程序设计与算法基础教程(第二版)》江红 余青松,第十一章课后习题答案

    我对图形用户界面基本无兴趣,无特殊情况,基本不打算碰这方面内容

    案例研究:简易图形用户界面计算器

    • Python实现简易图形用户界面计算器

    与上一章相同,我对于图形绘制的兴趣也基本没有,尝试做了2-7题,就完全没兴趣做下去了

    2. 参考例13.2利用Canvas组件创建绘制矩形的程序,尝试改变矩形边框颜色以及填充颜色

    • 调用组件pack()方法,调整其显示位置和大小
    • (x0,y0)是左上角的坐标
    • (x1,y1)是右下角的坐标

    3. 参考例13.3利用Canvas组件创建绘制椭圆的程序,尝试修改椭圆边框样式、边框颜色以及填充颜色

    • (x0,y0)是左上角的坐标
    • (x1,y1)是右下角的坐标

    4. 参考例13.4利用Canvas组件创建绘制圆弧的程序,尝试修改圆弧样式、边框颜色以及填充颜色

    • (x0,y0)是左上角的坐标
    • (x1,y1)是右下角的坐标
    • 选项start(开始角度,默认为0)和extend(圆弧角度,从start开始逆时针旋转,默认为90度)决定圆弧的角度范围
    • 选项start用于设置圆弧的样式

    5. 参考例13.5利用Canvas组件创建绘制线条的程序,尝试修改线条样式和颜色

    • (x0,y0),(x1,y1),…,(xn,yn)是线条上各个点的坐标

    6. 参考例13.6利用Canvas组件创建绘制多边形的程序,尝试修改多边形的形状、线条样式和填充颜色

    • (x0,y0),(x1,y1),…,(xn,yn)是多边形上各个顶点的坐标

    7. 参考例13.7利用Canvas组件创建绘制字符串和图形的程序,绘制y = cos(x) 的图形

    • (x,y)是字符串放置的中心位置

    图形绘制模块:turtle


    后面章节内容:未完待续…







}

数组类型和类型之间的转换

Numpy支持比Python更多的数字类型。本部分显示哪些是可用的,以及如何修改数组的数据类型。

布尔(True或False),存储为一个字节
默认整数类型(与Clong相同;通常是int64int32
无符号整数(0到255)
无符号整数(0到65535)
半精度浮点:符号位,5位指数,10位尾数
单精度浮点数:符号位,8位指数,23位尾数
双精度浮点:符号位,11位指数,52位尾数
复数,由两个32位浮点数(实部和虚部)
复数,由两个64位浮点数(实部和虚部)

Numpy数值类型是dtype(data-type)对象的实例,每个类型具有唯一的特征。在你使用下面的语句导入NumPy后

这些类型可以用plex_。其他数据类型没有Python等效的类型。

要确定数组的类型,请查看dtype属性:

这个类不是很有用,因为它与裸ndarray对象具有相同的构造函数,包括传入缓冲区和形状等等。我们可能更偏向于希望构造函数能够将已经构成的ndarray类型通过常用的numpy的 = info

所以,这个类实际上没有做任何有趣的事情:它只是将它自己的任何实例转换为常规的ndarray(否则,我们会得到无限的递归!),并添加一个info字典,告诉哪些输入和输出它转换。因此,例如:

}

二、如何在一个函数内部修改全局变量html

利用global 修改全局变量前端

os:提供了很多与操做系统相关联的函数python

四、字典如何删除键和合并两个字典

GIL 是python的全局解释器锁,同一进程中假若有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其余线程没法运行,等该线程运行完后其余线程才能运行。若是线程运行过程当中遇到耗时操做,则解释器锁解开,使其余线程运行。因此在多线程中,线程的运行还是有前后顺序的,并非同时进行。

多进程中由于每一个进程都能被系统分配资源,至关于每一个进程有了一个python解释器,因此多进程能够实现多个进程的同时运行,缺点是进程系统资源开销大

六、python实现列表去重的方法

先经过集合去重,在转列表

python2返回列表,python3返回迭代器,节约内存

九、一句话解释什么样的语言可以用装饰器?

函数能够做为参数传递的语言,可使用装饰器

十、python内建数据类型有哪些

__init__是初始化方法,建立对象后,就马上被默认调用了,可接收参数,如图

一、__new__至少要有一个参数cls,表明当前类,此参数在实例化时由Python解释器自动识别

二、__new__必需要有返回值,返回实例化出来的实例,这点在本身实现__new__时要特别注意,能够return父类(经过super(当前类名, cls))__new__出来的实例,或者直接是object的__new__出来的实例

三、__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上能够完成一些其它初始化的动做,__init__不须要返回值

四、若是__new__建立的是当前类的实例,会自动调用__init__函数,经过return语句里面调用的__new__函数的第一个参数是cls来保证是当前类实例,若是是其余类的类名,;那么实际建立返回的就是其余类的实例,其实就不会调用当前类的__init__函数,也不会调用其余类的__init__函数。

十二、简述with方法打开处理文件帮我咱们作了什么?

打开文件在进行读写的时候可能会出现一些异常情况,若是按照常规的plie做用

 只要不知足其中任意一个要求,就不符合同源策略,就会出现“跨域”

63、简述多线程、多进程

一、操做系统进行资源分配和调度的基本单位,多个进程之间相互独立

二、稳定性好,若是一个进程崩溃,不影响其余进程,可是进程消耗资源大,开启的进程数量有限制

一、CPU进行资源分配和调度的基本单位,线程是进程的一部分,是比进程更小的能独立运行的基本单位,一个进程下的多个线程能够共享该进程的全部资源

二、若是IO操做密集,则能够多线程运行效率高,缺点是若是一个线程崩溃,都会形成进程的崩溃

IO密集的用多线程,在用户输入,sleep 时候,能够切换到其余线程执行,减小等待的时间

CPU密集的用多进程,由于假如IO操做少,用多线程的话,由于线程共享一个全局解释器锁,当前运行的线程会霸占GIL,其余线程没有GIL,就不能充分利用多核CPU的优点

any():只要迭代器中有一个元素为真就为真

all():迭代器中全部的判断项返回都是真,结果才为真

python中什么元素为假?

答案:(0,空字符串,空列表、空字典、空元组、None, False)

ImportError:没法引入模块或包,基本是路径问题

IndexError:下标索引超出序列边界

KeyError:试图访问你字典里不存在的键

NameError:使用一个还未赋予对象的变量

一、复制不可变数据类型,无论copy仍是deepcopy,都是同一个地址当浅复制的值是不可变对象(数值,字符串,元组)时和=“赋值”的状况同样,对象的id值与浅复制原来的值相同。

二、复制的值是可变对象(列表和字典)

浅拷贝copy有两种状况:

第一种状况:复制的 对象中无 复杂 子对象,原来值的改变并不会影响浅复制的值,同时浅复制的值改变也并不会影响原来的值。原来值的id值与浅复制原来的值不一样。

第二种状况:复制的对象中有 复杂 子对象 (例如列表中的一个子元素是一个列表), 改变原来的值 中的复杂子对象的值  ,会影响浅复制的值。

深拷贝deepcopy:彻底复制独立,包括内层列表和字典

6七、列出几种魔法方法并简要介绍用途

__new__:建立对象时候执行的方法,单列模式会用到

__str__:当使用print输出对象的时候,只要本身定义了__str__(self)方法,那么就会打印从在这个方法中return的数据

__del__:删除对象执行的方法

8五、python字典和json字符串相互转化方法

前面的<>和后面的<>是对应的,能够用此方法

100、python传参数是传值仍是传址?

Python中函数参数是引用传递(注意不是值传递)。对于不可变类型(数值型、字符串、元组),因变量不能修改,因此运算不会影响到变量自身;而对于可变类型(列表字典)来讲,函数体运算可能会更改传入的参数变量。

10一、求两个列表的交集、差集、并集

10二、生成0-100的随机数

18:介绍一下except的用法和做用?

Python的except用来捕获全部异常, 由于Python里面的每次错误都会抛出 一个异常,因此每一个程序的错误都被看成一个运行时错误。
一下是使用except的一个例子:

由于这个错误是因为open被拼写成opne而形成的,而后被except捕获,因此debug程序的时候很容易不知道出了什么问题

pass语句什么也不作,通常做为占位符或者建立占位程序,pass语句不会执行任何操做,好比:

pass一般用来建立一个最简单的类:

pass在软件设计阶段也常常用来做为TODO,提醒实现相应的实现,好比:

若是须要迭代一个数字序列的话,可使用range()函数,range()函数能够生成等差级数。

21:有两个序列a,b,大小都为n,序列元素的值任意整形数,

无序;要求:经过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
将两序列合并为一个序列,并排序,为序列Source

拿出最大元素Big,次大的元素Small

在余下的序列S[:-2]进行平分,获得序列max,min

将Small加到max序列,将Big加大min序列,从新计算新序列和,和大的为max,小的为min。

}

我要回帖

更多关于 二元函数图像生成器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信