大学计算机-计算思维与人工智能(第2版)课件 第3、4章 算法与Raptor程序设计、Python程序设计基础_第1页
大学计算机-计算思维与人工智能(第2版)课件 第3、4章 算法与Raptor程序设计、Python程序设计基础_第2页
大学计算机-计算思维与人工智能(第2版)课件 第3、4章 算法与Raptor程序设计、Python程序设计基础_第3页
大学计算机-计算思维与人工智能(第2版)课件 第3、4章 算法与Raptor程序设计、Python程序设计基础_第4页
大学计算机-计算思维与人工智能(第2版)课件 第3、4章 算法与Raptor程序设计、Python程序设计基础_第5页
已阅读5页,还剩163页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章算法与Raptor程序设计content重点难点重点:1.算法的概念及特征2.算法表示3.Raptor程序设计难点:1.Raptor程序设计Contents目录3.1程序设计概述3.2算法3.3Raptor程序设计3.1程序设计概述

想一想,你了解什么样的程序设计语言?程序设计概述程序设计的定义:

程序设计是计算机科学与技术的基础,指通过编程语言,按逻辑结构编写程序解决问题或实现功能的过程。

不仅是写代码,涵盖问题理解分析、思路设计、框架构建、调试优化等步骤。

需应用计算机科学基本概念,注重程序可维护性、可扩展性和性能。

程序设计基础——定义、目标与步骤程序设计的目标提高效率简化操作解决实际问题目标·通过合理的需求分析和系统设计,程序员可以将问题分解为具体的任务,并通过编写代码逐步实现问题的解决。·通过设计合理的算法和数据结构,程序能够比人工操作更快、更准确地完成任务。·注重前端界面的友好性和易用性,使得用户能够在最短的时间内掌握操作方法。程序设计的目标健壮性与稳定性可维护性和可扩展性目标·程序设计不仅要关注当前需求的实现,还要考虑到未来可能的变化。·一个成功的程序应该具备在未来添加新功能、处理更大数据量或支持更多用户的能力。·程序应考虑到可能的错误,并采取措施进行处理。·通过合理的异常处理机制,程序能够在遇到错误时及时报告或进行自我修复,避免程序崩溃或造成系统不稳定。总

结复杂工程未来挑战程序设计是集分析、设计、实现、调试和优化于一体的复杂工程。不仅是编写代码,重要的是通过合理的设计和实现,解决实际问题、提高效率、简化操作、保证可维护性与可扩展性,并确保程序的健壮性和稳定性。未来的程序设计不仅仅是技术的挑战,更是对创造力和逻辑思维的全面考验。程序设计的基本步骤1.问题分析程序设计步骤4.编码实现3.系统设计与结构设计2.设计算法5.测试与调试6.维护与优化1.问题分析程序设计步骤4.编码实现2.设算法5.测试与调试程序员需要与用户或需求方进行沟通,明确需求的细节、限制条件和期望目标。此时的任务是提炼出问题的核心,确定需要解决的关键点。此阶段的成果是问题的定义和需求说明,通常通过文档记录下来,确保所有参与开发的人员对问题有统一的理解。2.设计算法程序设计步骤4.编码实现2.设算法5.测试与调试算法是解决问题的步骤和方法,是程序的核心。算法的设计的原则:•正确性:算法必须能够正确地解决问题,返回正确的结果。•高效性:在计算资源有限的情况下,算法的时间和空间复杂度应尽量小,能够快速处理大量数据。•可读性:算法应易于理解和实现,避免过于复杂的设计。•鲁棒性:算法需要考虑到各种异常情况,如输入数据的合法性、系统资源的约束等,能够应对各种可能的错误或异常。3.系统设计与结构设计程序设计步骤4.编码实现2.设算法5.测试与调试此阶段的目标是将问题和算法转化为具体的程序架构,并规划程序的模块和数据流。通常涉及以下内容:•模块划分:将整个程序分解成多个相对独立的模块,每个模块负责完成特定的功能。模块之间通过接口进行数据交换和通信。•数据结构设计:根据问题的需求选择合适的数据结构,以便在程序中高效地存储和操作数据。数据结构的选择直接影响程序的执行效率。•界面设计:如果程序需要与用户进行交互,那么用户界面的设计是必须考虑的部分。界面设计要考虑到用户体验,使得操作简单直观。4.编码实现程序设计步骤4.编码实现2.设算法5.测试与调试此阶段的目标是将设计转化为机器能够执行的程序。需要遵循编程规范:•命名规范:变量名、函数名和类名等应具备明确的意义,并符合团队的命名约定。•注释和文档:代码应包含适当的注释,说明代码的作用和使用方法。良好的注释能够提高代码的可维护性,帮助后续的开发和调试。•代码结构:代码应清晰、简洁、模块化,避免冗余和重复的代码。合适的代码结构可以提升程序的可读性和可扩展性。5.测试与调试程序设计步骤4.编码实现2.设算法5.测试与调试测试和调试的目的:确保程序的正确性和稳定性,并解决在开发过程中出现的各种错误或异常。•单元测试:测试程序的每个模块或函数是否按照预期工作。•集成测试:将多个模块组合在一起进行测试,确保模块之间的协作和数据传输没有问题。•性能测试:对程序的性能进行测试,评估程序在高负载、高并发等情况下的表现,确保其效率满足需求。•异常测试:测试程序在遇到异常情况时的表现,如输入数据不合法、系统资源不足等,确保程序能够稳定运行。6.维护与优化程序设计步骤4.编码实现2.设算法5.测试与调试维护通常包括:修复bug、更新功能、处理用户反馈等;而优化则是提升程序性能和效率,使其能够更好地应对增长的负载和数据量。程序优化的内容包括代码优化、算法优化、数据结构优化等。3.2算法1.什么是算法算法是按照一定的方法和步骤解决问题的过程。

算法是一系列解决问题的清晰指令,能够对一定规范的输入,在有限时间内获得所要求的输出。广义地说,算法就是做某一件事的步骤或程序。菜谱是做菜肴的算法,洗衣机的使用说明书是操作洗衣机的算法。通俗理解:算法就是解决一个问题的方法。据此而论,编写程序解决的任何一个问题都可以叫做算法。

2.算法举例3.算法在计算机科学中的应用(1)计算机算法的引入算法(Algorithm)理论处于计算机科学的核心地位。想要使用计算机解决问题,就要设计该问题的算法,要给出解决该问题所需的一系列解题步骤。算法有什么用?提高计算机i运行的效率,节约内存空间没有好算法,计算机完成一件工作可能需要1年;有好算法,计算机完成同样的工作可能只要几秒。(1)计算机算法的引入计算机软件的重要内容之一是程序,程序是计算机指令的序列,计算机一步一步地执行这个指令序列,就完成了希望它所做的事情。程序设计就是按照一定的要求编排一个合理的指令序列。程序设计主要包含两个方面:行为特性设计和结构特性设计。结构特性设计是指确定合适的数据结构,将程序处理的数据在计算机内部表示和存放。行为特性设计是确定要解决的实际问题的具体步骤,把全部解题过程完整地描述出来,这一过程就是算法设计。这就引出来一个很重要的公式:

著名计算机科学家沃思提出一个公式:数据结构+算法=程序(Algorithm+DataStructures=Programs)对数据的描述:数据结构(datastructure)对操作的描述:算法(algorithm)一个程序应包括两个方面的内容:凭借一句话获得图灵奖的Pascal之父.这个公式对计算机科学的影响程度足以类似物理学中爱因斯坦的“E=MC2”——一个公式展示出了程序的本质。以上的公式表明:1、算法与数据结构是密切相关的,算法的设计要与数据结构相适应。2、算法不等于程序,它不需考虑具体的机器,算法也不等于计算方法,它比计算方法更具体。算法与数据结构:程序员想拔高一个层次,数据结构和算法只是很小一部分,但却是很重要的一部分。判断一段程序的好坏,基于什么呢?其实很多方面,比如说可读性,可扩展性等,但还有一个可以量化的标准,就是空间和时间复杂度的分析。这是算法的内容。(2)算法的特征著名计算机科学家Knuth把算法的特征归纳以下5点:1974年度图灵奖。(2)算法的特征:著名计算机科学家Knuth把算法的特征归纳以下5点:一、有穷性(finiteness)

一个算法必须在有限个步骤之后结束。换句话说,一个算法必须在有限时间内完成,否则,该算法就失去了实际价值。因此,在算法中不能出现无限循环。数学中的无穷级数在计算时只能取有限项。二、确定性(definiteness)

算法中的每一个步骤都必须有明确的定义,不允许存在多义性和摸棱两可的解释。如“将X,Y两个数进行加减运算”,是做加法运算还是做减法运算,没有说清;再如“给变量X增加一个值”,增加一个值,具体是多少,没有说清。在算法中,这样含糊不清的步骤不允许出现。(2)算法的特征:三、能行性(effectiveness)

算法中的每一个步骤都是可以实现的,或可以分解为可执行的基本操作。例如

在算法中不能出现零做除数、在实数范围内对一个负数求平方根等情况。四、输入(input)

算法允许有零个或多个输入量。五、输出(output)

算法必须有一个或多个输出。根据以上讨论,我们对算法有了进一步的认识:算法是精确定义的一系列规则,这些规则指定了一系列的操作,经过有限步骤产生所求问题的解。(3)算法解决问题的类型计算机科学领域的问题大致可分为以下三种类型:一、判定性问题:这类问题给出的是与否的判别。例如

连通性问题(在计算机网络中判断两台主机是否连通、在社交网络中判断两个用户是否存在间接社交关系等,都可以抽象成连通性问题。)回路问题(网络回路、运输回路),查找与排序问题,字符匹配问题等。二、最优化问题:这类问题是在所有可能的解中求出最优解。例如求函数的极值,最短路径问题,最小生成数问题等。三、函数计算问题:这类问题是在一定约束条件下求数值解。例如方程求根,矩阵运算,函数求值等。(4)一些重要的算法:A*搜寻算法BeamSearch二分取中查找算法Branchandbound数据压缩

Diffie–Hellman密钥协商Dijkstra’s算法动态规划欧几里得算法

最大期望(EM)算法快速傅里叶变换(FFT)哈希函数

堆排序归并排序RANSAC算法RSA加密演算法并查集Union-findViterbialgorithm4.程序设计语言ProgrammingLanguage程序设计语言的产生与发展思考:什么是计算机语言?计算机语言通常是一个能完整、准确和规则地表达人们的意图,并用以指挥或控制计算机工作的“符号系统”。计算机语言包括:机器语言、汇编语言、高级语言三类高级语言有:BASIC、C、C++、PASCAL、FORTRAN、智能化语言(LISP、Prolog、CLIPS、OpenCyc、Fazzy)、动态语言(Python、PHP、Ruby、Lua)等。程序设计语言的产生与发展随着计算机的发展,程序设计语言经历了从机器语言到高级语言的发展历程。高级语言的发展历程1、机器语言

机器语言:由一串“0”和“1”构成二进制代码,能够被计算机直接接受和执行的语言。优点:能够直接在计算机上执行。缺点:程序难以理解,程序设计任务繁重,效率低下,而且要求程序员必须经过专门的训练。00001101十进制的13 程序设计语言的产生与发展

2、汇编语言汇编语言:是一种类似英语缩略词且带有助记性符号的语言,每条汇编指令都和一条机器指令相对应,只是指令码和操作数都采用符号形式。这种语言与特定的机器和特定的微处理器有关,不能被机器直接接受,必须用一种语言翻译器将程序中的每条语句翻译成机器语言才能执行。

优点:程序更易理解。缺点:程序不能被机器直接接受,要经过翻译器翻译成机器语言。程序设计语言的产生与发展3、高级语言高级语言:不能被电脑直接识别,用高级语言编写的程序必须经过翻译器将其翻译成机器语言,才能在计算机上执行。第一个高级语言是Fortran。

优点:易于理解,移植性好。缺点:高级语言编写的程序要经过翻译器翻译成机器语言,才能在计算机上执行。程序设计语言的发展历史机器语言汇编语言高级语言面向过程面向对象CPU指令系统,由0、1序列构成的指令码组成如:10000000加

10010000减用助记符号描述的指令系统如ADDA,B程序设计是数据被加工的过程客观世界可以分类,对象是类的实例对象是数据和方法的封装对象间通过发送和接受消息发生联系程序设计关键是定义类,并由类派生对象冯.诺依曼结构:计算机运算器控制器存储器主机:I/O设备:键盘、显示器等中央处理器CPU面向机器的语言5.程序流程图FlowChart程序流程图的画法1为什么使用流程图2流程图的组成和画法3流程图的改进:N-S盒图(1)为什么使用流程图自然语言就是日常使用的语言,汉语或英语或其它语言。自然语言表示通俗易懂,但文字冗长,容易出现“歧义性”自然语言表示的含义不严格,要根据上下文才能判断其正确含义。描述包含分支和循环的算法时也不很方便。因此,除了那些很简单的问题外,程序设计一般不用自然语言描述算法。(1)为什么使用流程图例1:有两个存储单元a和b,要求将它们的值互换。

分析:按存储器的性质,如果将单元a的值直接送到单元b中,那么就会覆盖掉b原来的内容,因此,需要借助一个临时单元c来交换。

具体算法用自然语言表述如下:步骤1:将单元a的值送给单元c;步骤2:将单元b的值送给单元a;步骤3:将单元c的值送给单元b。(1)为什么使用流程图流程图通常采用一些几何图形来代表各种类型的操作,在图形内标明文字或符号来表示操作的内容,并用箭头来表示操作的顺序。用流程图表示算法,直观形象,易于理解.(2)流程图的组成和画法起止框输入/输出框判断框处理框流程线连接点(2)流程图的组成和画法算法三种基本结构的流程图画法(2)流程图的组成和画法(2)流程图的组成和画法(2)流程图的组成和画法例:求1+2+3+4+…+10用流程图进行描述。n+1=>n1=>ns+n=>s0=>sn≤10输出s是否针对流程图存在的缺点,I.Nassi和B.Shneiderman提出了结构化程序设计的流程图,称为N-S图,更能体现结构化程序设计的思想。推荐使用N-S图。

N-S图完全去掉了流程线,算法的所有处理步骤都写在一个大矩形框内(表示简单、符合结构化思想)(象堆积木)(3)流程图的改进:N-S盒图由于流程图允许使用箭头随意跳转,对表示算法的层次结构非常不利,且流程图占的篇幅较大,作图工作量也很大。

(3)流程图的改进:N-S盒图顺序结构:从前向后顺序执行程序选择结构:根据判断条件的结果选择执行程序。循环结构:根据条件反复的执行某一段程序若干次。0

s1nn≤10n+ssn+1n

输出s(3)流程图的改进:N-S盒图n+1=>n1=>ns+n=>s0=>sn≤10输出s是否例:求1+2+3+4+…+10用流程图进行描述。流程图例:求10个任意整数中的最大数用N-S图进行描述输入max

1

n

n<10

输入x

T

x>max?F

xmaxn+1n输出max(3)流程图的改进:N-S盒图3.3Raptor程序设计为什么要学习程序设计?由于计算思维的核心之一是算法思维,同时算法思维也是计算机科学的精髓。而算法思维的实现离不开程序设计,所以对于计算思维的学习和认识,必须从程序设计开始。为什么要使用RAPTOR?RAPTOR(theRapidAlgorithmicPrototypingToolforOrderedReasoning--用于有序推理的快速算法原型工具),是一种基于流程图的可视化程序设计环境,为程序和算法设计的基础课程教学提供实验环境。使用RAPTOR设计的程序和算法可以直接转换成为C++、C#、Java等高级程序语言,这就为程序和算法的初学者铺就了一条平缓、自然的学习阶梯。使用RAPTOR的理由可以在最大限度地减少语法要求的情形下,帮助用户编写正确的程序指令程序就是流程图,可以逐个执行图形符号,以便帮助用户跟踪指令流执行过程容易掌握用RAPTOR可以进行算法设计和验证,从而使初学者有可能理解和真正掌握“计算思维”Raptor的特点(1)Raptor语言简洁灵活。(2)Raptor具有基本的数据结构、数据类型和运算功能。(3)Raptor具有结构化控制语句。(4)Raptor语法限制较宽松。(5)Raptor可以实现计算过程的图形表达及图形输出。(6)Raptor对常量、变量及函数名中所涉及的英文字母不区分大小写,但只支持英文字符。(7)Raptor设计的程序可移植性较好。Raptor的使用——工作环境简介F5:运行流程图F10:单步执行显示执行结果。Raptor的使用——六种基本符号5519:52Raptor的使用——流程图编程Raptor程序是一个有向图(DirectedGraph)必须要有「Start」和「End」。程序会由「Start」开始,运行至「End」才完成。在「Start」和「End」之间插入其他部件,便可制作一个较有意义的程序。输入

把数据及指令

输入计算机处理

计算机对输入的

数据进行运算输出

计算机显示处理

数据的结果用一用Raptor!画一个左图所示的流程图:从工具窗口选择赋值控件,在主窗口的流程图中单击,添加控件;双击赋值控件,在弹出的“Enterstatement”窗口中的set处输入变量名wh,在to处输入值“Hello,world!”,按回车;用同样的方法画一个输出控件;流程图画好后保存文件命名为myfirst.rap;然后单击(按F5)运行流程图。观察运行过程及结果。Raptor编程基础——什么是变量?在主存储器的一个存贮位置。内存存储单元一个符号名。通过引用符号名来访问其所对应的存储单元。存储单元大小视定义类型而定。程序运行时,变量的值是可改变的。主存储器名称:x类型:数字名称:myname类型:文字59

Raptor编程基础——变量变量的值的来源通常来自用户输入计算机加载(赋值存入内存单元)一般来说,变量在程序运行前,其数值是未定的。第一个被赋予的值为初始值(initializingavariable)。如使用未定初始值的变量,或会引发运行时错误。在程序运行的过程中,变量的数值会有所变化。能够处理不同的输入,才是一个较具意义的程序。何谓赋值?

Raptor编程基础——变量使用变量时须注意的地方命名限制:起首字符必须为英文字母。其后的字符可以是英文字母、数字或下划线,但不可以是其他符号或空格键。对:Hello,send2you,it_a_nice_day错:2myfriend,iamveryangry!名字不可与一些内定的预留字(Reservedword)相同。编程的良好习惯有意义的命名(e.g.exam_mark)

Raptor编程基础——数据类型Raptor的数据类型数值型(Number):如456、-9、3.14159、0.000156字符串型(String):如“Iamaboy”、“Helloworld”字符型(Character):如‘B’、‘#’使用变量时常见的错误1.变量无值,也就是没有给变量赋值就直接使用。2.变量名拼写错误。19:52这个程序x的最终值是什么?在x←x*2下方加上x←x/3,x的最终值是什么?动手做!演示Raptor-控制结构ControlStructure64控制结构ControlStructure顺序结构“and-then”按指令排列先后顺序执行。从前向后执行,必须按先后顺序执行。顺序结构左图是一个计算由华氏温度转化为摄氏温度的温度转换程序。思考:把题1的程序改为一个计算由摄氏温度转化为华氏温度的程序。F=

(提示:你需要哪些变量?已知哪些变量?求哪些变量?)字符串:用双引号括起来字符:用单引号括起来左图是一个计算圆面积程序的一小部分,试参考它的算法,把它改写成一个计算圆形周长的程序。(提示:你需要哪些变量?已知哪些变量?求哪些变量?)动手做!分支结构“if-then”按条件判断,分流执行由条件句判别True或False条件条件不符合(False)条件符合(True)分支结构——例子条件条件不符合(False)条件符合(True)成绩评定69分支结构算式結果密码正确

AND提款不超过2500元true密码正确

AND提款超过2500元密码错误

AND提款不超过2500千元密码错误

AND提款超过2500元AND例子:提款机:密码正确及提款金额不超过2500元,才可提款。计算机科学分支结构71动手做!试编写一个程序,能够作出华氏温度(Fahrenheit)和摄氏温度(Celsius)的转换。用户首先选择那一种换算(FtoC或CtoF),然后输入所需数值,程序按照以下公式把结果运算出来:

CtoF: F=9/5C+32 FtoC: C=5/9(F–32)

循环结构“While-do”循环结构的设计是让我们能够方便地进行重复运算动作。重复运算的次数按照以下条件而定。以数字设定执行次数。以某项条件的发生而停止重复运算。循环内的语句应能改动条件变量以脱离循环。循环结构——例子累加求和:sum=1+2+3+…+100提炼累加sum=sum+i动手做!参照例子求自然数1n中的奇数和及偶数和。19:5275例子1.

这个程序计算什么?例子考考你!19:5276例子

2.这个程序计算什么?

例子考考你!选择与循环的考虑当我们应使用选择语句还是循环语句时,我们最好先考虑以下问题:是否需要考虑「做」与「不做」某项工作?

(选择)是否需要从两项选择中选取一个(而不是全部)?(选择)是否从多项选择中选取其中一个?

(嵌套选择)是否有需要执行多于一次?

(循环)能否预知执行指令的次数?

(数字设定执行次数的循环(for-loop))你掌握了吗?能辨识我们应用选择或循环控制结构来处理所面对的问题。能以选择或循环控制结构编写小型程序。针对选择控制结构:做A与不做A。做A或B。从A,B,C….选一个。针对循环控制结构:重复A多次。能因应情况,选取「限次循环」或「条件循环」来解决问题。明白一个欠佳的脱离循环条件,或未能更新循环变量,将产生永远循环。谢谢!第4章Python程序设计基础content重点难点重点:1.Python的安装与配置环境2.Python包管理与第三方库导入3.Python基本输入/输出4.Python数据类型5.程序控制语句难点:1.Python数据类型2.程序控制语句Contents目录4.1Python开发环境搭建与使用4.2Python包管理与第三方库导4.3Python代码规范及帮助4.4Python基本输入/输出4.5常量和变量4.6Python数据类型4.7运算符与表达式4.8程序控制语句4.9Python程序举例4.1Python开发环境搭建与使用4.1.1Python语言特点1.Python语言简介

Python语言由吉多•范罗苏姆(GuidovanRossum)于1989年圣诞节期间开始设计,首个公开发行版Python0.9.0于1991年正式发布。2.Python语言特点(1)简单(2)易学、易读、易维护(3)免费、开源(4)可移植性(5)解释性(6)面向对象(7)可扩展性(8)可嵌入性(9)丰富的库(10)高级动态编程4.1.2Python的安装与配置环境1.安装Python下面以Windows系统为例演示Python标准安装流程:(1)登录官网下载安装程序(2)安装

(3)验证安装成功2.环境变量补配配置流程如下:(1)在“此电脑”图标处单击鼠标右键,在弹出的快捷菜单中选择“属性”菜单项。(2)在“计算机名、域和工作组设置”面板右侧单击“更改设置”选项,在“系统属性”对话框选择“高级”选项卡。(3)单击“环境变量”按钮,在“系统变量”区域双击“Path”变量。(4)在弹出的“编辑环境变量”对话框中单击“新建”按钮,依次添加Python的安装路径以及Scripts子文件夹路径,以Python实际安装路径为准。如果机器上安装了多个版本的Python,建议使用“上移”按钮,把最常用的版本所在路径放在Path变量的开始处,然后单击“确定”按钮即可。(5)配置验证。3.IDLE的启动IDLE(IntegratedDevelopmentandLearningEnvironment)是Python官方内置的轻量级IDE,主要服务于教学场景与小规模脚本调试。安装好python以后,IDLE就会自动安装,不需要另外安装,有交互式和脚本(文件)式两种执行方式。(1)交互式执行方式

安装Python后,可以通过交互式运行代码。单击“开始”->“所有程序”->“Python3.12”,->“IDLE(Python3.1264-bit)”菜单项,即可启动IDLE打开Shell窗口。

在提示符“>>>”后输入Python语句后,按回车键执行并显示结果,如果需要再次执行前面执行过的语句,可以按组合键Alt+P和Alt+N翻看上一条语句或下一条语句.(2)脚本式执行方式:

如果需要保存和反复修改、运行代码,可以通过脚本式执行方式运行代码,在IDLE窗口中单击菜单栏的“File”->“NewFile”菜单项,新建一个Python文件。在新建的窗口中,编写Python代码。

代码编写完成后,单击新建窗口菜单栏的“File”->“Save”菜单项,或使用快捷键Ctrl+S保存文件。

单击菜单栏的“Run”->“RunModule”菜单项,或使用快捷键“F5”来运行Python文件。4.1.3PyCharm的安装与使用1.PyCharm简介

PyCharm是JetBrains公司推出的专业PythonIDE(IntegratedDevelopmentEnvironment),提供全生命周期的开发,主要功能包括:(1)基础开发功能(2)调试分析工具(3)工程化管理(4)版本控制集成2.PyCharm下载与安装PyCharm下载与安装步骤如下:(1)访问JetBrains官方网站下载PyCharm集成开发环境安装包。PyCharm有两个版本:社区版(CommunityEdition),专业版(Professional)。(2)完成PyCharm安装包下载后,定位至安装文件保存目录,双击扩展名为.exe的安装程序文件启动安装进程。(3)按照安装向导指引逐步完成配置,包括选择安装路径、创建桌面快捷方式、配置环境变量等核心选项。安装路径不要选择有中文的目录,在“安装选项”对话框中勾选全部复选框。(4)单击“完成”按钮结束安装进程。3.PyCharm的使用

在使用PyCharm进行开发前,需确保系统已正确安装Python解释器并配置环境变量。

Python项目遵循标准层级结构:项目(Project)->包(Package)->模块(Module)的三级组织方式,实际代码逻辑通常存储在.py格式的模块文件中。(1)新建项目

单击“文件”->“新建项目”菜单项,进入项目创建界面。在“位置”字段设置项目存储路径,建议使用英文目录。确认配置信息后,单击“创建”按钮完成项目初始化。(2)新建包

在“项目名称”目录上单击鼠标右键,在弹出的快捷菜单中选择“新建”->“Python软件包”菜单项,在弹出的对话框中输入包名按回车键确认创建。(3)新建模块/文件

在目标Python包上单击鼠标右键,在弹出的快速菜单中选择“新建”->“Python文件”选项。在弹出的对话框“名称”处输入模块名称,按回车键确认创建。

4.2Python包管理与第三方库导入4.2.1Python包管理1.模块(Module)以.py为扩展名的独立代码文件,实现特定数据处理功能。2.包(Package)通过目录结构与__init__.py文件组织的模块集合,主要作用是解决命名冲突,实现模块化分层管理。3.库(Library)功能关联的包/模块集合,分为三类:(1)标准库(2)第三方库(3)自定义库4.2.2pip包管理工具

1.pip常用命令(1)安装最新版本语法格式:pipinstallpackage-name例如:pipinstallrequests(2)安装指定版本语法格式:pipinstallpackage-name==1.2.3(版本号)例如:pipinstallnumpy==2.2.3(3)升级库版本语法格式:pipinstall--upgradepackage-name例如:pipinstall--upgradepandas(4)卸载库语法格式:pipuninstallpackage-name例如:pipuninstallmatplotlib(5)查看已安装的包及版本语法格式:piplist2.安装第三方库示例下面以在Windows操作系统下安装NumPy的操作步骤为例,具体说明使用pip在线安装第三方库的方法。(1)打开Windows的“命令提示符”窗口。(2)执行安装命令:“pipinstallnumpy”,随后会显示安装过程信息,当出现“Successfullyinstalled…”提示时,代表安装成功。(3)安装验证:可以使用以下方式验证安装是否成功,进入Python交互环境(IDLE),在提示符后输入如右上所示代码4.2.3模块导入Python通过模块化架构实现代码复用,提供三种标准导入模块方式:方式1:import模块名[as别名]#导入标准库math>>>importmath

#使用math模块中的sqrt函数

>>>result=math.sqrt(16)

>>>print(result)

4.0

#导入标准库random,并设置别名为m>>>importrandom

asm

#使用别名调用函数获得[1,100]区间的一个随机整数>>>result=m.randint(1,100)

>>>print(result)#每次运行结果不同36

>>>importnumpyasnp>>>print(np._version_)2.2.3#输出版本号即成功方式2:from模块名import函数/类/变量名[as别名]#从math模块中导入sqrt函数>>>frommathimportsqrt#直接使用sqrt函数,无须像importmath时写math.sqrt>>>result=sqrt(9)>>>print(result)3.0#输出结果#从datetime模块中导入datetime类并起别名dt,datetime模块用于处理日期和时间>>>fromdatetimeimportdatetimeasdt>>>now=dt.now()>>>print(now)2025-04-1112:38:54.236840

#输出结果

方式3:from模块名import*实际开发中应谨慎使用。>>>frommathimport*

#从math模块导入所有内容#可直接使用pi(圆周率常量)和sin(正弦函数)等>>>print(pi)3.141592653589793

#输出结果>>>print(sin(pi/2))1.0#输出结果4.3Python代码规范及帮助4.3.1Python代码规范1.缩进在Python中,代码之间的逻辑关系是依靠代码块的缩进量来表示的,缩进结束就表示一个代码块结束。#正确的缩进x=9y=20if(x>y):

print('max=',x)else:

print('max=',y)2.注释Python代码注释规范主要有两种形式。(1)单行注释以“#”开始,表示本行#之后的内容为注释。是单行注释,常放在某语句后面,也可以单独成一行。(2)多行注释包含在一对三引号'''…'''或"""…"""之间且不属于任何语句的内容将被解释器认为是注释。#使用脚本式执行方式#三引号中间的内容为多行注释"""输出结果:012345"""foriinrange(5):

#循环输出数字0-5

print(i,end='')3.导入模块规则每个import语句只导入一个模块,尽量避免一次导入多个模块。4.必要的空格与空行在运算符两侧、函数参数之间、逗号两侧建议使用空格分开。5.尽量不要写过长的语句如果语句过长,可以考虑拆分成多个短一些的语句。如果一行语句确实太长,可以在行尾加上反斜杠“\”来换行分成多行,建议使用圆括号将多行内容括起。4.3.2使用帮助Python自带了大量关于库及函数的说明文档,可以使用help()函数来获取帮助信息。灵活使用帮助文档对学习Python语言至关重要。使用格式如下:help(对象)如果使用help查看内置函数和类型的帮助信息,可以在IDLE环境下输入以下命令,即可查看指定的内置函数的信息,例如:>>>help(max)

#获取max()函数的帮助信息如果需要查看模块中成员函数信息,可以先用import导入该模块,再用help查看其某个成员函数的信息,例如:>>>importos>>>help(os.fdopen)如果需要查看整个模块的信息,可以先用import导入该模块,再用help查看整个模块的帮助信息,例如:>>>importmath>>>help(math)4.4Python基本输入/输出4.4.1Python基本输出1.基本语法与用法格式为:print([输出项,…][,sep=分隔符][,end=结束符])>>>print('hello','world')helloworld

#输出结果为helloworld>>>print('hello','world',sep=',')hello,world

#输出结果为hello,worldprint('************')print('hello','world')print('************')#保存执行后的输出结果为:************helloworld************#如果结束符指定为空,则不输出换行符,例如:print('************',end='')print('hello','world',end='')print('************')#输出为:************helloworld************print("姓名","年龄","分数",sep="|",end="\n---\n")print("张三",20,85.5,sep="|")#输出结果为:#姓名|年龄|分数#---#张三|20|85.5#print函数支持同时输出多个内容,用逗号分隔,例如:>>>name="Alice">>>age=30>>>print("Mynameis",name,"andI'm",age,"yearsold")MynameisAliceandI'm30yearsold#输出结果2.格式化输出(1)格式化占位符输出(%操作符)用于对输出数据进行格式化,能在字符串中插入变量值,指定变量类型和输出格式,如指定小数点位数、输出宽度和填充字符等。在字符串中用%s(字符串)、%d(整数)、%f(浮点数)等占位符,后面参数提供实际值。>>>print("Number:%d,Pi:%f"%(100,3.14159))Number:100,Pi:3.141590

#输出结果>>>name="Bob">>>age=28

>>>print("Mynameis%sandI'm%dyearsold."%(name,age))

MynameisBobandI'm28yearsold.

#输出结果(2)格式化输出(str.format()方法)str.format()方法提供了较为灵活的格式化方式。支持位置参数(按顺序对应占位符)和关键字参数(通过指定关键字来对应占位符),还能指定填充字符、对齐方式、宽度、精度等格式化选项。适用于需要精细控制输出格式,或使用多个变量且可能重复使用的场景。>>>num=100>>>pi=3.1415926#{0}是位置参数占位符,对应format方法中第一个参数num#{1:.2f}也是位置参数占位符,其中:.2f

表示将对应参数(这里是pi)格式化为保留两位小数的浮点数>>>print("Number:{0},Pi:{1:.2f}".format(num,pi))Number:100,Pi:3.14

#输出结果#位置参数示例>>>print("Thenumberis{},andtheletteris{}".format(10,'a'))Thenumberis10,andtheletterisa

#输出结果

#关键字参数示例>>>print("Name:{name},Age:{age}".format(name="Bob",age=30))Name:Bob,Age:30#输出结果#指定宽度和填充字符,左对齐,宽度为10,用'-'填充>>>print("'{:-<10s}'".format("hello"))'hello-----'

#输出结果#指定精度,保留两位小数>>>price=9.999>>>print("Price:{:.2f}".format(price))Price:10.00#输出结果(3)格式化字符串常量输出(f-string)Python3.6引入,在字符串前加上f(或F),字符串中的大括号{}内可直接嵌入表达式,Python会自动计算表达式的值并插入到相应位置。这种方式简洁直观,且在处理变量和表达式时效率较高,支持复杂表达式,能让代码更易读和编写。>>>name="Alice">>>age=25>>>height=1.65#嵌入变量>>>print(f"Mynameis{name},andI'm{age}yearsold.")MynameisAlice,andI'm25yearsold.#输出结果#嵌入表达式>>>print(f"Theresultof3+5is{3+5}.")Theresultof3+5is8.#输出结果#格式化数值,保留两位小数>>>print(f"Myheightis{height:.2f}meters.")Myheightis1.65meters.#输出结果4.4.2Python基本输入input函数实现交互式输入,其一般格式为:变量=input("提示字符串:"),例如:user_input=input("请输入一些内容:") #获取用户输入print("你输入的内容是:",user_input) #输出用户输入的内容input函数返回值始终为字符串类型,如果需要其他类型的数据(如整数或浮点数),可以通过int()、float()等内置函数进行显式类型转换。#获取整数输入age=int(input("请输入你的年龄:"))

#获取浮点数输入height=float(input("请输入你的身高(米):"))print("你的年龄是:",age)print("你的身高是:",height)

4.5常量和变量4.5.1常量常量是在程序运行过程中其值不发生改变也不能改变的字面值常量,如123、12.34、“abcd”等都是字面值常量>>>PI=3.1415926>>>radius=5>>>area=PI*(radius**2)>>>print(f"半径为{radius}的圆面积为{area}")半径为5的圆面积为78.539815#输出结果4.5.2变量变量是在程序运行过程中其值可以发生变化的量。1.变量的名称Python中标识符的命名规则如下:(1)标识符的第一个字符是字母或下划线,不能是数字。(2)标识符由字母、数字和下划线组成。(3)大小写敏感,标识符区分大小写,如student_name和student_Name是两个不同的标识符。(4)标识符中不能包含空格、@、%以及$等特殊字符。(5)不建议使用系统内置的模块名、类型名或函数名以及已导入的模块名及其成员名作为标识符,这将会改变其类型和含义,可以通过“dir(__builtins__)”查看所有内置对象名称。(6)不能使用关键字。可以使用keyword模块打印关键字>>>importkeyword>>>print(keyword.kwlist)

#输出的当前版本的关键字['False','None','True','and','as','assert','async','await','break','class','continue','def','del','elif','else','except','finally','for','from','global','if','import','in','is','lambda','nonlocal','not','or','pass','raise','return','try','while','with','yield']Python是一种动态语言,关键字列表也可能会更改,可以利用keyword.iskeyword()函数判断标识符是否为关键字。>>>importkeyword>>>print(keyword.iskeyword('and'))True>>>print(keyword.iskeyword('And'))FalsePython标识符有一些命名的惯例,Python对标识符的长度没有严格限制,但建议标识符名称不要过长,以便于阅读和理解。虽然Python允许使用Unicode字符集中的任何字符来命名标识符(例如中文),但出于代码可读性和兼容性的考虑,建议使用ASCII字符集中的字符来命名标识符。类型命名约定示例变量/函数/方法蛇形命名法(snake_case)全小写,单词间用下划线分隔student_count常量全大写蛇形命名法(UPPER_SNAKE_CASE)MAX_CONNECTIONS类名驼峰命名法(CamelCase)首字母大写,无下划线DataParser3.变量的值Python是一种动态类型语言,不仅变量的值可以改变,变量的类型也可以改变,可以使用“typy(变量名)”获取变量的数据类型。#变量定义与赋值>>>x=10

#变量x为整型>>>y=3.14

#变量y为浮点型>>>name="Alice"#变量name为字符串型>>>is_valid=True#变量is_valid为布尔型#变量重新赋值>>>x=10

#变量x为整型,值为10>>>x=20

#变量x为整型,x的值从10变为20>>>type(x)

#内置函数type()用来查看变量的类型<class'int'>

#输出:变量x的类型为整型>>>x="Hello"

#变量x的类型从整数变为字符串>>>type(x)<class'str'>

#输出:变量x的类型为字符串2.变量的类型在Python语言中,不需要显式指定变量的类型,给变量赋值即指定了该变量的类型,变量的类型取决于变量值的数据类型。在Python中,采用动态类型系统,变量本质是对内存对象的引用标识。Python中,函数id()可以返回指定对象的地址,id()函数的返回值并不固定,但其返回值一定为整数。>>>a=256 #创建int对象256,变量a指向该对象>>>b=a #变量b与a共享同一对象引用>>>print(id(a)==id(b))True #输出True>>>a+=1 #创建新int对象257,a指向新对象>>>print(id(a)==id(b))False #输出False4.6Python数据类型4.6.1数字型Python常见的数字类型如下所示,其中可变性指对象创建后值是否可修改。类型名称描述示例可变性注意事项int整数42,

-100不可变小整数(-5~256)驻留优化float浮点数3.14,

-0.5e3不可变注意浮点精度问题,如

0.1+0.2!=0.3complex复数(实部

+虚部)1+2j,

3j不可变虚部后缀为

j

Jbool布尔值True,

False不可变继承自

int,True(1),

False(0)1.整型数(int)整型数据通常被称为整数,可以是正整数或负整数,不带小数点。2.浮点型(float)表示带小数点的数值,支持小数或科学计数法两种表示方式。由于精度的问题,浮点数运算可能会有一定的误差,应尽量避免在浮点数之间进行相等性测试,应该以二者之差的绝对值是否足够小来作为两个浮点数是否相等的依据。>>>a=10

#没有前缀表示十进制>>>b=0b1010

#前缀0b表示二进制>>>c=0o12

#前缀0o或0O表示八进制>>>d=0xA

#前缀0x表示十六进制>>>a=3.14

#小数形式表示>>>print(a)

#输出a的值为3.143.14>>>b=3.14e2

#科学计数法表示,相当于b=3.14*102>>>print(b)

#输出b的值为314.0314.0>>>a=0.1+0.2>>>b=0.3>>>tolerance=1e-9>>>is_equal=abs(a-b)<tolerance>>>print(is_equal)True#输出结果3.复数类型(complex)复数由实部(real)和虚部(imag)构成,在Python中,复数的虚部以j或J作为后缀,格式为:a+bj,其中a表示实部,b表示虚部。>>>b=2+4j>>>print(b,type(b))(2+4j)<class'complex'>>>>T=True>>>print(T+4)5>>>F=False>>>print(F-4)-44.布尔型(bool)在Python3中,bool是int的子类,只有True(表示真)和False(表示假)两种值,可以和数字相加,True(1)、False(0)。除直接给变量赋值True和False外,还可以用bool(X)来创建布尔型变量。>>>a="">>>b="hello">>>print(bool(a))False>>>print(bool(b))True1.字符串的创建Python中可以使用单引号、双引号、三单引号、三双引号作为定界符来表示字符串。当文本包含某类引号时,应选择不同类型的定界符,避免转义。三引号支持跨行定义且保留换行符>>>s1='Hello'

#使用单引号作为定界符>>>s2="Python"

#使用双引号作为定界符>>>print(s1,s2,sep='')HelloPython#正确示例>>>msg="It'saPythonstring"

#双引号包含单引号>>>html='<ahref="index.html">'

#单引号包含双引号#错误示例(需转义)>>>bad_str='It\'sastring'

#需转义单引号#多行文本>>>poem='''静夜思…床前明月光,…疑是地上霜。'''>>>print(poem)静夜思床前明月光,疑是地上霜。2.索引和切片获取字符串子串可以通过索引和切片操作获取字符串的子串。索引用于获取单个字符,切片用于获取由连续字符组成的子串。Python中索引位置从0开始,切片语法为:“变量[start:end:step]”,其规则是:包含起始索引start、不包含结束索引end、按step步长间隔取值,默认为1,可省略步长参数。>>>x='hellopython'>>>print(x)

#输出原始字符串hellopython>>>print(x[2:5])

#切片操作(索引2到5,但不包含5)llo>>>print(x[8])

#获取索引8的字符h3.字符串操作常见的内置方法Python还提供了一些方法支持对字符串的操作,常见的内置方法有:(1)capitalize():把句首的字母大写。(2)split():把句子分成单词。(3)find(x):找到给定词x在句中的索引,找不到返回-1。(4)replace(x,y):把句中x替换成y。(5)count():用于统计字符串或列表中某个元素出现的次数。>>>x='hellopython'>>>print(x.capitalize())Hellopython>>>x='hellopythonprogramming'>>>print(x.find('python'))6>>>print(x.find('world'))-1>>>x='hellopythonprogramming'>>>print(x.replace('programming','language'))hellopythonlanguage>>>s='helloworld'>>>print(s.count('l'))3转义字符描述\\反斜杠符号\'单引号\"双引号\n换行符\t水平制表符\r回车符\b退格(Backspace)\f换页符\v垂直制表符\a响铃(ASCIIBEL字符)\ooo八进制值表示的字符(如\123表示字符S)\xhh十六进制值表示的字符(如\x41表示字符A)\(行尾)续行符(用于代码换行时保持语法连续)>>>print('\101\n\x42\nC')ABC>>>print("续行符示例:这是一个非常长的字符串,\可以换行书写。")续行符示例:这是一个非常长的字符串,可以换行书写。4.Python的转义字符需要使用特殊字符时,可以用反斜杠(\)转义字符,Python的转义字符如下表所示。5.Python字符串运算符Python字符串的常用运算符如下表所示。运算符描述+字符串连接*重复输出字符串[]通过索引获取字符串中的字符[:]提取字符串的子序列in成员运算符,如果字符串中包含给定的字符则返回Truenotin成员运算符,如果字符串中不包含给定的字符则返回True>>>a='Hello'>>>b='World'>>>print(a+b)HelloWorld>>>print(a*2)

HelloHello>>>print(a[2])l>>>print(a[0:3])Hel>>>print('H'ina)True>>>print('H'notina)False注意:(1)字符串不可变性:所有运算符操作均生成新字符串,原字符串不变。(2)类型匹配:+和*要求操作数类型正确,如str+int会报错。(3)大小写敏感:比较运算符区分大小写,如"A"!="a"。(4)Unicode码点:字符比较基于Unicode值,如'A'(65)<'a'(97)。类型名称描述示例可变性注意事项list有序序列[1,"a"],

[]可变支持动态扩展/收缩tuple有序序列(1,"a"),

(3.14,)不可变单元素元组需加逗号(如

(x,))dict无序键值对集合{'a':1},

dict(x=1)可变键必须是可哈希对象set无序唯一元素的集合{1,2},

set()可变元素必须是可哈希对象4.6.3列表、元组、字典、集合列表(list)、元组(tuple)、字典(dict)、集合(set)是Python中常用的数据类型,很多复杂的业务逻辑最终由这些基本数据类型来实现,下表比较了它们之间的区别,有关这些数据类型的详细使用请参考第5章相关内容。1.列表(list)列表是Python中最基本的数据结构,用于存储一系列有序的项目。列表中的项目可以是不同类型的数据。使用英文方括号[]作为定界符,元素之间用逗号分隔。创建列表后,可以随时增删或修改里面的内容,列表里的元素可以是数字、字符串、布尔值,甚至其他列表,用数字索引(从0开始)获取元素,支持正数和负数索引。>>>numbers=[10,20,30,40]

#创建列表对象>>>print(numbers[0])

#输出10(第一个元素)10>>>print(numbers[-1])

#输出40(最后一个元素)402.元组(tuple)元组与列表类似,但元组是不可变的,意味着一旦创建,其内容不能被修改。元组通常用于存储固定不变的数据集合。用圆括号()定义,元素之间用逗号分隔。如果只有一个元素,需要加逗号如(5,),支持不同类型,元组可以包含数字、字符串、列表等任意类型,和列表一样,用数字索引,从0开始获取元素。>>>x_tuple=(4,5,6)

#创建元组对象>>>print(x_tuple[2])

#使用下标访问元组中指定位置的元素63.字典(dict)字典是一种存储键值对的数据结构,用花括号{}定义,每个元素由“键:值”组成,键和值之间用冒号分隔。键必须是不可变类型,如字符串、数字、元组,值可以是任意类型。可以通过键快速访问值,键不可重复,值可重复,如果键重复,后面的值会覆盖前面的值,可以随时添加或删除键值对。>>>x_dict={'A':65,'B':66,'C':67}

#创建字典对象>>>print(x_dict['A'])

#字典对象的下标是“键”654.集合(set)集合是一个无序的、不包含重复元素的数据结构。使用花括号“{}”作为定界符,集合会自动去重,且支持数学上的集合运算(如交集、并集)。元素没有固定顺序,不支持索引访问。空集合只能用set()方法定义,不能直接使用“{}”定义。集合的元素必须不可变,不能包含列表或字典,但可以包含元组。>>>x_set={7,8,9}

#创建集合对象>>>print(7inx_set)

#成员测试True#自动去重>>>names={"小明","小红","小明"}>>>print(names)

{'小明','小红'}

#输出{"小明","小红"}4.7运算符与表达式运算符功能说明例子+算术加法,列表、元组、字符串合并与连接,正号3+6=9-算术减法,集合差集,相反数6-2=4*算术乘法,序列重复2*3=6/除法6/2=3.0%模运算符或求余运算符7%2=1**幂运算2**2=4//整除,其结果是将商的小数点后的数舍去7//2=3,7.0//2.0=3.04.7.1运算符1.算术运算符Python语言的算术运算符如下表所示。(1)“+”运算符“+”运算符除了用于算术加法和表示正号以外,还可以用于列表、元组、字符串的连接。>>>[1,2,3]+[4,5,6]

#连接两个列表

[1,2,3,4,5,6]>>>

(1,2,3)+(4,5)

#连接两个元组

(1,2,3,4,5)>>>'hello'+'python'

#连接两个字符串'hellopython'但不支持不同类型对象之间相加或连接。例如:>>>'A'+2

#抛出异常,不支持不同类型对象相加>>>{1,2,3,4,5}-{2,3,5}

#集合的差集运算{1,4}(3)“*”运算符“*”运算符除了表示算术乘法,还可以用于列表、元组、字符串这几个类型的对象与整数的乘法,表示序列元素的重复,生成新的列表、元组或字符串。>>>

(1,2,3)*2

#元组与整数相乘,得到新元组(1,2,3,1,2,3)>>>'hello'*2

#字符串与整数相乘,得到新的字符串'hellohello'(2)“-”运算符“-”运算符除了用于算术减法和相反数以外,还可以用于集合的差集运算。>>>-11//3-42.比较运算符比较运算符也称关系运算符,用于对两变量或表达式的结果进行比较,若结果为真,则返回True,若结果为假,则返回False。常用的关系运算符如下表所示。运算符功能说明例子结果==等于3==4False!=不等于3!=4True>大于3>4False<小于3<4True>=大于等于3>=4False<=小于等于3<=4True(4)“//”运算符:“//”运算符有“向下取整”的特点。3.逻辑运算符逻辑运算符主要用于某些条件判断。and是逻辑与运算符,二元运算符,and两端的条件均为真时,结果才为真。or是逻辑或运算符,二元运算符,or两端的条件只要有一个条件为真,结果即为真。not是逻辑非运算符,一元运算符,not后的条件为真,结果为假,not后的条件为假,结果为真。运算符功能说明例子结果and逻辑与TrueandTrueTrueor逻辑或TrueorFalseTruenot逻辑非notTrueFalsePython中,将非0的数值、非空的数据类型等价于True,0或空类型等价为False。Python逻辑运算符遵循短路求值(Short-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论