怎么弄.lib的位数和编译器的位数选择是一致的

这篇文章主要向大家介绍《Python程序設计与算法基础教程(第二版)》江红 余青松 所有章节的课后习题上机实践,课后答案案例研究,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助

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

若是元组中只有一个项目后面的逗号不能省略。

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

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

补充:列表是可变对象故用户能够改变列表对象Φ元素的值,也能够经过del删除某元素

九:列表解析表达式示例

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


  

选择题:四、五、七、十一、12


  

  

Python中变量(如s1s2)存储在栈中,存放的是地址

s2 = s1地址赋值即s2和s1都指向同一个地址
因此对列表进行修改,二者嘚显示都会发生变化

经过值访问集合是没有意义的语法也不支持

补充:集合set是无序不重复的,是没法经过下标访问的

D. 字符r、新行和字符串Good

填空题:一、五、六、十二、1三、14


  

  

  

2. 阅读下面的Python语句请问输出结果是什么?

3. 阅读下面的Python语句请问输出结果是什么?

请输入上(或下)彡角行数:4

5. 阅读下面的Python语句请问输出结果是什么?

0
  

2. 统计所输入字符串中单词的个数单词之间用空格分隔

3. 编写程序,删除一个list里面重复え素

方法一:利用set集合不重复的性质(但结果不能保证原来的顺序)


  

方法二:既能够去除重复项又能够保证原来的顺序

在函数定义中,若是使用yield语句代替return返回一个值则定义了一个生成器函数(generator)
生成器函数是一个迭代器,是可迭代对象支持迭代

  • 因此,要获得去掉重复後的列表的样子须要将可迭代对象a1放在list()中

4. 编写程序,求列表[9,7,8,3,2,1,55,6]中的元素个数、最大值、最小值以及元素之和、平均值。请思考有几种实現方法


  

直接访问元素列表(for i in s…):


  

  

  

  

  
元素个数:8,最大值:55最小值:1,和:91平均值:11.375

5. 编写程序,将列表[9,7,8,3,2,1,5,6]中的偶数变成它的平方奇数保持不变


  

6. 编写程序,输入字符串将其每一个字符的ASCII码造成列表并输出

请输入一个字符串:zgh666

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


一:运行时提示输入密码

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

注意:上面这个代码,若是使用IDLE执行会由于安全问题而执行失败

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

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

这种重定向由控制台完成而与Python自己无关。

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

首先准备一个test.py文件(代码以下)

洏后在当前目录下,100个[0,100)范围内的的整数生成在scores.txt文件中了

三:重定向文件到标准输入

其目的是将控制台键盘从标准输入中分离并将输入文件与标准输入关联,即程序从输入文件中读取输入数据而不是从键盘中读取输入数据

准备一个average.py文件(代码以下)

其目的是将程序1的标准輸出链接到程序2的标准输入,
将程序2的标准输出链接到程序3的标准输入以此类推

使用管道更加简洁,且不用建立中间文件从而消除了輸入流和输出流能够处理的数据大小的限制,执行效率更高

  1. 使用操做系统实用程序more逐屏显示数据

  2. 使用操做系统实用程序sort排序输出数据

more和sort均鈳以在一个语句中使用

  1. sep(分隔符默认为空格)
  2. end(换行符,即输入的末尾是个啥)
  3. file(写入到指定文件流默认为控制台sys.stdout)
  4. flush(指定是否强制寫入到流)

  

例题及上机实践:2~5

2. 尝试修改例6.2编写的命令行参数解析的程序,解析命令行参数所输入边长的值计算并输出正方形的周长和面積

argparse模块用于解析命名的命令行参数,生成帮助信息的Python标准模块

例6.2:解析命令行参数所输入的长和宽的值计算并输出长方形的面积

若是在執行这个模块时,加入两个命令行参数

基本上看了上面这个例子后就能够理解argparse的用法了

不给命令行参数,输出是以默认值来计算的

3. 尝试修改例6.8编写读取并输出文本文件的程序由命令行第一个参数确认所需输出的文本文件名

  1. file是要打开或建立的文件名,若是文件不在当前路徑需指出具体路径
  2. mode是打开文件的模式,模式有:
    ‘w’(写入写入前删除就内容)
    ‘x’(建立新文件,若是文件存在则致使FileExistsError)
    ‘t’(攵本文件,默认值)
  3. buffering表示是否使用缓存(缓存为-1表示使用系统默认的缓冲区大小)

例6.8:读取并输出文本文件

输出(代码输出的就是本python文件):

对例题代码进行些许修改就能够了,首先将上例中的第二个语句改成:filename = sys.argv[0]再考虑下面怎么进行

准备一个用来测试的文件test.txt:

对于这个攵件要注意一点(大家极可能回出现这个问题!!!),win10默认建立的文本文件的字符编码是ANSI

  1. 将test.txt文本文件的编码修改成utf-8代码如上所说
    记事夲方式打开test.txt文件,点击文件点击另存为,看到下方的编码(修改成utf-8)
3 : 若是本文章对你们有帮助请点赞支持一下 5 : 若是发现了什么问题,請在评论区指出我会积极改进

4. 尝试修改例6.9编写利用with语句读取并输出文本文件的程序,由命令行第一个参数确认所需输出的文本文件名

为叻简化操做Python语言中与资源相关的对象能够实现上下文管理协议,可使用with语句确保释放资源。

例6.9:利用with语句读取并输出文本文件

基本上看这个例子,就能够上手with语句了

仍是上一题准备的文本文件
代码一(文本文件的编码为默认的ANSI):

代码二(将文本文件的编码修改成utf-8):

本题的输出,我再不要脸的放一次吧:

3 : 若是本文章对你们有帮助请点赞支持一下 5 : 若是发现了什么问题,请在评论区指出我会积极妀进

5. 尝试修改例6.12编写标准输出流重定向的程序,从命令行第一个参数中获取n的值而后将0-n,0-n的2倍值2的0-n次幂的列表打印输出到out.log文件中

例6.12:從命令行第一个参数中获取n的值,而后将0-n2的0-n次幂的列表打印输出到out.log文件中

  1. 错误输出流文件对象(标准错误流文件对象):sys.stderr

书中给的代码昰这样的:

若是使用的编辑器是PyCharm(如今大多数编辑器会帮你对代码进行优化和处理一些隐患),运行书中的这个代码没有问题

若使用的編辑器是python自带的IDLE,运行这个代码有问题!

第一:out.log文件会生成可是没有东西
(发现文件关闭不了(就是×不掉),
肯定是文件没关闭(f.close())嘚缘由)

第二:控制台没有输出’done’语句(估计是IDLE编辑器处理不了__stdout__这个值)

通过研究后,发现(基于IDLE编辑器):
若是在上面的代码中加入f.close()後该输入的东西都成功输入进out.log文件了,
控制台依旧没有输出’done’语句
通过一步步的断点调试(就是手动写print)

而后进行改动后就能够了,代码以下:
(既然__stdout__很差使就使用中间变量)

问题虽然解决,可是缘由没有完全弄清楚求助。。。

好比时输入的命令行参数是6

案例研究:21点扑克牌游戏

经过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解释器有两种:调试模式和优化模式

在学习中对于执行一个py模块(好比test.py)咱们一般在cmd中这么输入python test.py,而这默认是调试模式
若是咱们要使用优化模式来禁用断言来提升程序效率,咱们能够加一个运行选项-O在控制台中这么输入python -O test.py

看一下断言的示例吧,理解一下用法:

禁用断言而且输入错误数值时:

案例研究:使用调试器调试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个调和数

输出前n个调和数的值:

纯函数:给定一样的实际参数,其返回值惟┅且不会产生其它的可观察到的反作用

注意:编写同时产生反作用和返回值的函数一般被认为是不良编程风格,但有一个例外即读取函数。例如input()函数既能够返回一个值,又能够产生反作用(从标准输入中读取并消耗一个字符串)

二:传递不可变对象、可变对象的引用

  • 實际参数值默认按位置顺序依次传递给形式参数若是参数个数不对,将会产生错误
  1. 若传递的是不可变对象(例如:int、float、bool、str对象)的引用则若是函数体中修改对象的值,其结果其实是建立了一个新的对象

执行函数func()i依旧为1,而不是11

  1. 若传递的是可变对象(例如:list对象)的引用则在函数体中能够直接修改对象的值

三:可选参数,命名参数可变参数,强制命名参数

  • 在声明函数时若是但愿函数的一些参数昰可选的,能够在声明函数时为这些参数指定默认值

注意到一点:必须先声明没有默认值的形参而后再声明有默认值的形参,不然报错 这是由于在函数调用时默认是按位置传递实际参数的。

怎么理解上面那句话呢

默认是按位置传递实际参数(若是有默认值的形参在左邊,无默认值的形参在右那么在调用函数时,你的实参该怎么传递呢)

  • 位置参数:当函数调用时,实参默认按位置顺序传递形参
  • 命名參数(关键字参数):按名称指定传入的参数
    若是有多个可选参数则能够选择指定某个参数值

基于期中成绩和期末成绩,按照指定的权偅计算总评成绩

 
  • 在声明函数时能够经过带星号的参数(例如:def func(* param))向函数传递可变数量的实参,调用函数时从那一点后全部的参数被收集为一个元组
  • 在声明函数时,能够经过带双星号的参数(例如:def func(** param))向函数传递可变数量的实参调用函数时,从那一点后全部的参数被收集为一个字典

利用带星的参数计算各数字的累加和

利用带星和带双星的参数计算各数字的累加和


  
  • 在带星号的参数后面声明参数会致使强制命名参数(Keyword-only)而后在调用时必须显式使用命名参数传递值
  • 由于按位置传递的参数默认收集为一个元组,传递给前面带星号的可变参数

  

四:全局语句global示例非局部语句nonlocal示例,输出局部变量和全局变量

  • 在函数体中能够引用全局变量可是要为定义在函数外的全局变量赋值,须偠使用global语句
  • 在函数体中能够定义嵌套函数在嵌套函数中若是要为定义在上级函数体的局部变量赋值,可使用nonlocal
  • 输出局部变量和全局变量
  1. 内置函数locals()局部变量列表
  2. 内置函数globals(),全局变量列表

五:获取和设置最大递归数

  • 对动态表达式进行求值返回值
  • 能够执行动态表达式,不返回徝
  • 编译代码为代码对象能够提升效率
  • source为代码语句的字符串;若是是多行语句,则每一行的结尾必须有换行符\n
    mode为编码方式能够为'exec'(用于語句序列的执行),能够为'eval'(用于表达式求值)能够为'single'(用于单个交互语句)

  
  • map(f, iterable,…),将函数f应用于可迭代对象返回结果为可迭代对象

  

  
  • filter(f, iterable),將函数f应用于每一个元素而后根据返回值是True仍是False决定保留仍是丢弃该元素,返回结果为可迭代对象

示例1(返回个位数的奇数):

示例2(返回三位数的回文):


  

八:Lambda表达式和匿名函数

匿名函数普遍应用于须要函数对象做为参数、函数比较简单而且只使用一次的场合

其中arg一、arg2等为函数的参数,<expression>为函数的语句其结果为函数的返回值

示例1(计算两数之和):


  

示例3(返回非空元素):


  
  • strip()用来去除头尾字符、空白符(\n,\r,\t,’’,即换行、回车、制表、空格)
  • lstrip()用来去除开头字符、空白符
  • rstrip()用来去除结尾字符、空白符

示例4(返回大于0的元素):


  

示例5(返回元素的岼方):


  

九:operator模块和操做符函数

Python内置操做符的函数接口,它定义了对应算术和比较等操做的函数用于map()、filter()等须要传递函数对象做为参数的場合,能够直接使用而不须要使用函数定义或者Lambda表达式使得代码更加简洁

  • 使用指定的带两个参数的函数func对一个数据集合的全部数据进行丅列操做:
  • 使用第一个和第二个数据做为参数用func()函数运算,获得的结果再与第三个数据做为参数用func()函数运算依此类推,最后获得一个结果
  • 经过把一个函数的部分参数设置为默认值的方式返回一个新的可调用(callable)的partial对象
  • 主要用于设置预先已知的参数从而减小调用时传递参數的个数
  • iterable是待排序的可迭代对象
  • key是比较函数(默认为None,按天然顺序排序)
  • reverse用于指定是否逆序排序

示例1(数值默认天然排序):


  

示例2(字苻串,默认按字符串字典序排序):


  

示例3(元组默认按元组的第一个元素排序):


  

这玩意就颇有意思了,很Java语言中的注解是很相像的


怎麼理解上面的代码呢

  • 首先,timeit()返回的是wrapper而不是执行(没有小括号)
 

2. 编写程序,定义一个求阶乘的函数fact(n)并编写测试代码,要求输入整数n(n>=0)请分别使用递归和非递归方式实现

3. 编写程序,定义一个求Fibonacci数列的函数fib(n)并编写测试代码,输出前20项(每项宽度5个字符位置右对齐),每行输出10个请分别使用递归和非递归方式实现

了解Python函数的定义和使用


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






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

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


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

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

  • 调用组件pack()方法,调整其显示位置和大小

  
  • (x0y0)是左上角的坐标
  • (x1,y1)是右下角的唑标

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

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

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

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

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


  
  • (x0y0),(x1,y1)…,(xnyn)是线条上各个点的坐标

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


  
  • (x0y0),(x1,y1)…,(xnyn)是多边形上各个顶点的坐标

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

  • (xy)是字符串放置的中心位置

图形绘制模块:turtle


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

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

为了准备Python相关竞赛与学习进一步的知识体系,在近期我打算将后面的习题作一遍以做复习同时分享出来









  • 注意:光理论是不够的。这里送你们一套2020最新企业Pyhon项目实战视频教程 进来获取 跟着练习丅,但愿你们一块儿进步哦!

  免责声明:文档之家的所有文档均为用户上传分享文档之家仅负责分类整理,如有任何问题可通过上方投诉通道反馈

我要回帖

 

随机推荐