版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
人工智能通识(理工科)北京科技大学主要内容计算机体系结构计算机的硬件组成以GPU为中心的计算架构数据中心与算力网络计算机体系结构概念和发展计算机体系结构目标是提高计算机系统的整体性能,降低功耗、节省成本。计算机体系结构的发展历程大致经历四个阶段:第一阶段是20世纪40年代末到60年代中期,计算机系统的硬件发展很快,通用硬件已经比较成熟,但是缺少通用软件。第二阶段是从20世纪60年代中期到70年代中期,集成电路制造工艺水平不断提高,计算能力和处理速度更快,体积和能耗更低。1965年,Intel公司的创始人戈登·摩尔提出了“摩尔定律”,同样面积的半导体芯片上集成的电子元器件数目,每隔18-24个月翻一番,其计算能力也将提升一倍。软件开发还处于“软件作坊”的形式,从而导致了第一次“软件危机”,诞生了“软件工程学”的学科,推动了软件技术的进步。计算机体系结构概念和发展第三阶段是从20世纪70年代中期到80年代中期,微处理器得到了快速发展,出现了以微处理器为核心产品的个人计算机,而随之不断发展壮大的是代表着计算机硬件的因特尔公司和代表着计算机系统软件的微软公司,形成Wintel联盟的生态。第四阶段从20世纪80年代中期开始,一直持续到现在,计算机的硬件系统和软件系统都得到了显著发展。特别是Client/Server和Browser/Server架构的分布式计算模型,允许不同位置和不同类型的计算机协同工作,标志着计算机体系结构从集中式到分布式计算的转变。同时,C++、C#、Java等面向对象编程语言的诞生,软件设计模式的大量应用,有效解决了代码可复用性、可扩展性和可维护性等问题。新型计算架构双核CPU,通过在单个芯片上集成两个独立的计算内核来实现并行处理,使得CPU能够同时执行多个指令,提升了整体计算性能。多核并行处理技术,GPU(GraphicsProcessingUnits,图形处理单元),内部集成了数以千计的计算核心。GPU不仅擅长处理图形图像数据,还能胜任机器学习、人工智能等密集型计算任务,特别在计算机视觉、自然语言处理、大模型、区块链、密码学等前沿领域。图灵机和冯诺依曼体系冯.诺依曼体系结构特点:①存储程序的概念②指令和数据均以二进制形式存储和处理③五大功能部件
电子计算机之父冯.诺依曼(JohnvonNeumann,1903~1957)主要贡献:
提出“存储程序”概念,奠定了现代计算机体系结构和工作原理冯诺依曼体系结构CPU输入设备内存储器输出设备运算器控制器数据流指令流控制流以存储器为中心的计算机组成结构CPU(CentralProcessingUnit)冯诺依曼体系结构(1)运算器(ArithmeticLogicUnit,ALU):算术逻辑单元负责执行所有的算术运算(如加减乘除)和逻辑运算(如与、或、非等)。(2)控制器(ControlUnit,CU):控制单元负责从内存中取出指令、解码并控制计算机的各个部分执行操作。(3)存储器(Memory):指内存,用于存储程序和数据。(4)输入设备(InputDevices),用于接收外部数据或指令,常见的输入设备有键盘、鼠标、扫描仪等。(5)输出设备(OutputDevices),用于显示或传送计算结果,常见的输出设备有显示器、打印机、扬声器等。冯诺依曼体系-运算器运算器:进行算术运算和逻辑运算的部件。数据寄存器ALU累加器ArithmeticandLogicUnit算术运算:
+-×÷逻辑运算:
AND,OR,NOT数据寄存器冯诺依曼体系-控制器控制器:指挥中心,指挥各部件协调的工作。控制器程序计数器PC指令寄存器IR指令译码器ID操作控制器根据译码器的译码结果,产生出实现该指令的全部动作的控制信号。存放将要被执行的指令地址,有自动加1的功能。存放当前要执行的指令代码,等待处理。识别和翻译指令CPU的主要性能指标(1)频率主频:CPU内核工作的时钟频率,MHZ,GHZ。一般来讲,CPU的主频越高,CPU的运算速度就越快。外频:CPU与外部主板上各部件(如内存条)交换数据和指令的工作时钟频率。一般为33MHz、100MHz、133MHz、200MHz等.倍频:通过提高倍频,CPU可以在较低的外频下达到更高的工作频率,增强计算能力。主频=外频*倍频。(2)字长
CPU每次可处理的二进制数的位数。
字长直接影响CPU数据处理能力和计算精度。字长越长,CPU处理数据的速度和能力越强。
现代计算机的字长普遍为32位或64位。字长为64位的CPU每次能处理64位二进制数据,超过该位数的数据则需多轮操作。00101011字节Byte76543210位bitCPU的主要性能指标多核CPU在一枚CPU中集成两个或多个完整的计算引擎5*4*3*2的计算发挥并行计算的优势核并不是越多越好:某些情况下分割运算,实现并行的难度更大CPU的架构CPU架构:指设计和实现CPU的硬件和其操作机制的整体结构。它定义了计算机如何执行指令,如何处理数据和控制流程架构应用指令集优点缺点x86由Intel和AMD等公司采用,广泛应用于个人电脑、服务器等领域CISC复杂指令集计算机兼容性强,支持大量的软件和操作系统指令集复杂,功耗相对较高ARM由苹果、高通、三星、英伟达、博通、华为等公司采用,主要应用于嵌入式设备、移动设备(如智能手机、平板电脑)和一些低功耗服务器RISC精简指令集计算机低功耗、性能出色,支持大量的嵌入式系统和移动设备与x86系统相比,软件兼容性较差CPU架构x86架构CISC(ComplexInstructionSetComputing)复杂指令集著名厂商:Intel,AMD酷睿、志强、AMD锐龙等处理器ARM架构RISC(ReducedInstructionSetComputing)精简指令集著名厂商:ARM(设计厂商)ARM处理器体积小、低功耗、低成本、高性能应用于手机、平板、汽车芯片等嵌入式设备,如海思麒麟芯片MULa,bMOVAX,aMOVBX,bMULAX,BXSTRa,AXa=a*b我国自主研制CPU的发展2002年中国科学院计算所自主研发的第一款通用高性能微处理器“龙芯1号”成功问世,标志着我国CPU自主研发的新纪元。此后,龙芯系列不断更新迭代,推出了龙芯2号、龙芯3号等,显著提升了我国自主CPU的性能和性价比。除了龙芯系列,飞腾、鲲鹏、海光、兆芯、申威等国内厂商也在自主CPU研发领域取得了显著成果。内存单元的结构每个存储单元由1字节(8bit)组成,存储地址的位数与内存容量相关10110110存储内容10110001存储地址缓冲寄存器地址总线数据总线地址译码器读写控制电路读写命令10110010101100111011010010110101……CPU可直接访问的存储器;用于存储正在运行的程序或数据。采用大规模集成电路技术制成的半导体存储器,快、小、轻。内存性能指标:容量,存取速度。内存储器随机访问存储器RAM动态RAMDRAM静态RAMSRAM只读存储器ROMRandomAccessMemory保存的信息在计算机断电后就会消失,又称为易失性存储器1可读可写2易失性内存(也称为主存储器)ReadOnlyMemory一般情况下,ROM中的信息是固化的又称为非易失性存储器,如BIOS1只读2非易失性Cache通常所说的内存容量指的是RAM,RAM是内存性能的决定性因素。冯诺依曼体系-瓶颈CPU和内存之间的速度差异在冯·诺依曼架构中,CPU的处理速度和传统内存的访问速度差异会导致CPU等待内存,即CPU的计算能力无法充分发挥,因为它必须等待内存的读写操作。处理器速度较快:现代CPU设计通常包括多个核心和高频时钟,能够每秒执行数十亿个指令,但需要从内存中获取数据或指令。内存速度较慢:内存的访问速度远低于CPU的运算速度,尤其在数据量大的时候,内存访问的延迟会显著影响整体计算性能。静态RAM(Cache)高速缓存器(Cache,简称缓存)是为了解决CPU和内存存储速度不匹配的问题,它介于内存和CPU之间,位置可以在CPU芯片内部,也可以在CPU芯片的外部。Cache的存取速度比内存快,但价格昂贵,能够以接近CPU的速度向CPU提供程序指令和数据。内存CPUSRAM(Cache)主板DRAM静态RAM(Cache)高速缓冲存储技术基于程序执行的局部性原理(程序的执行在一段时间内总是集中在程序代码的一个小范围内),因此,当CPU读取内存中某一地址的指令时,计算机就自动地将该地址相近的一段代码从内存传送到Cache中。静态RAM(Cache)内存CPU核心1CPU核心2L1二级缓存三级缓存L3二级缓存L1L1L1CPU核心3二级缓存L1L1CPU核心4二级缓存L1L1主板DRAML1:Level1,存取速度最快L2:Level2L3:Level3,容量最大只读存储器ROMROM(Read-OnlyMemory):非易失性存储器,用于存储永久性数据,如计算机系统的引导程序(BIOS/UEFI)完成自检。与RAM不同,ROM即使在断电的情况下也能保留数据。现代ROM以FlashMemory(闪存)为主FlashMemory:更先进的非易失性存储技术,广泛应用于现代设备中,支持电子擦除和编程,具有更高的存储密度和更快的操作速度。广泛用于U盘、SSD(固态硬盘)、智能手机、数码相机、游戏机等设备内存性能指标容量:内存的存储空间大小,通常以GB为单位,现代计算机通常配置8GB到64GB甚至更大的RAM带宽:内存的数据传输速率,通常以GB/s为单位。带宽越大,内存在处理大量数据时的效率越高。延迟:指从发出请求到数据实际传输的时间,通常为几十到几百纳秒之间(CPU的单个时钟周期通常在几纳秒到十几纳秒之间)存储设备层次结构速度差异,具体可体现为纳秒(ns)、微秒(μs)、毫秒(ms)到秒(s)的量级跨度!关于访问速度,CPUGHz,约1ns;内存,约100ns.内存速度是硬盘的大约一百万倍。内存对硬盘:硬盘Register存储设备层次结构外存储器外存储器也称为辅助存储器,简称外存、辅存,只能和内存储器交换信息,不能被计算机系统的其他部件直接访问。外存储器的存储容量大,能够长期保存数据,但存取速度较慢,一般用来存放大量暂时不用的数据和程序,需要时,可以成批地和内存储器进行信息交换。常用的外存储器有机械硬盘、固态硬盘、U盘、光盘、移动硬盘、磁带等。
输入和输出设备输入设备输出设备显卡显卡(GraphicsCard),又称为显示适配器,是连接显示器和计算机主板的关键组件。显卡承担输出显示图形的任务,同时显卡有图像处理能力,用于渲染图像、视频和动画所需的密集计算;可协助CPU工作,提升系统整体运行速度。GPU(GraphicsProcessingUnit,图形处理单元):显卡的处理器,显卡的“心脏”。GPU使显卡减少了对CPU的依赖,并进行部分原本CPU的工作,执行复杂的数学和几何计算,这些计算是图形渲染所必需的,某些最快速的GPU集成的晶体管数甚至超过了普通CPU。计算机的主要电路系统芯片组扩展槽接口主板及插卡的直流电源供电接插件……主板台式机的主板CPU插槽内存插槽PCI插槽AGP插槽总线是计算机各部件之间传送信息的公共信息通道,以多根线路构成的导线束方式,并行传输。按照传输的信息内容不同分为数据总线DB(DataBus)、地址总线AB(AddressBus)和控制总线CB(ControlBus)。总线宽度:数据总线一般和字长的位数相同;地址总线的宽度决定了CPU的寻址范围。总线中央处理器CPU输入设备输入接口存储器RAMROM输出接口数据总线DB地址总线AB控制总线CB输出设备主频=外频*倍频字长:CPU每次可处理的二进制数的位数系统总线DBCBAB连接五大功能部件CPU与主板之间使用外频同步运行数据总线宽度与字长相同决定了寻址内存的大小35倍倍频决定CPU常态运行的频率底线,睿频依托倍频,随负载动态提升倍数以定性能上限,二者共同构成“基础+弹性”的CPU频率调节体系。输入设备:键盘、鼠标、扫描仪等输出设备:显示器、打印机、绘图仪等外存:机械硬盘、固态硬盘、光盘、U盘等
外部设备硬件运算器控制器主机内存CPU随机存储器(RAM)只读存储器(ROM)1.2计算机系统的硬件组成外存储器程序和数据从外存成批传送到内存指令1指令2......指令k......指令n数据1数据2......数据m程序数据内储存器CPU逐条执行指令,按照指令要求完成对数据的运算和处理将处理结果成批传送到外存以长久保存CPU从内存中逐条读取指令及相关数据将指令处理结果送回内存保存外存储器(简称外存或辅存)存取速度慢成本低、容量大不与CPU直接连接,先传送到内存,然后才能被CPU使用属于非易失性存储器,用于长久存放系统中几乎所有的消息内存储器(简称内存或主存)存取速度快成本高、容量相对较小直接与CPU连接,CPU对内存中可直接进行读、写操作属于易失性存储器(volatile),用于临时存放正在运行的程序和数据内存与外存的关系冯诺依曼体系-工作过程基本步骤:取指令、分析指令、执行指令开始指令指令指令指令结束指令程序的执行取出指令分析指令执行指令从内存某地址取出要执行的指令把取出的指令送指令译码器,译出对应操作向相关部件发送控制命令,完成操作译码器ID操作控制器地址寄存器AR累加器数据寄存器数据寄存器程序计数器PC指令寄存器IR数据寄存器DRCPUALUCPU模型机译码器ID操作控制器地址寄存器AR累加器数据寄存器数据寄存器程序计数器PC指令寄存器IR数据寄存器DRCPUALU存储器地址指令或数据内容20213031CLAADD[30]000006①③④地址总线数据总线②⑤000020000020000021CLACLA000000译码器ID操作控制器地址寄存器AR累加器数据寄存器程序计数器PC指令寄存器IR数据寄存器DRCPUALU①④②000021000022000021000000ADD[30]ADD[30]数据寄存器存储器地址指令或数据内容20213031CLAADD[30]000006③地址总线数据总线译码器ID操作控制器地址寄存器AR累加器数据寄存器程序计数器PC指令寄存器IR数据寄存器DRCPUALU000021000022ADD[30]ADD[30]000000①③④000030000006000006+000006数据寄存器存储器地址指令或数据内容20213031CLAADD[30]000006地址总线数据总线000006②显卡:计算机中的一种重要硬件组件,主要负责图形处理和视频输出任务。与CPU不同,专门设计用来加速图像渲染、视频解码和计算密集型的并行处理任务。显卡的主要组成GPU(
GraphicsProcessingUnit,图像处理单元):显卡的核心部分,负责实际的图形处理工作。现代GPU通常由数千个小型计算单元组成,可以并行处理大量的图形数据。显存:显卡中用于存储图形数据的高速内存,包括纹理、渲染缓冲区等。显存的大小和带宽直接影响显卡的性能,尤其在处理高分辨率图形和复杂场景时。1.3AI时代的算力需求-GPU显卡的应用领域游戏:现代游戏尤其是3D游戏需要强大的显卡支持,显卡负责渲染复杂的游戏画面和特效。视频编辑和图形设计:显卡被广泛应用于专业的图形设计、视频剪辑和渲染软件,如AdobePremierePro、AutodeskMaya等,加速图形渲染。虚拟现实(VR)和增强现实(AR):VR和AR应用要求显卡能够实时渲染高质量的3D图像。科学计算与人工智能:随着GPU计算能力的提升,显卡在深度学习、人工智能、科学研究(如分子建模、天气预报等)中的应用越来越广泛。NVIDIA的CUDA技术使得GPU能够加速并行计算任务。GPU与CPUCPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂。GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境。CPU擅长逻辑控制,串行的运算GPU擅长的是大规模并发计算。计算量大,但没什么技术含量,而且要重复很多很多次。例如,图像处理、破解密码等计算可以分解为多个相同的简单小任务。CPU的计算速度<GPUCPU逻辑运算能力>GPU突破算力霸权的硬件之路国产GPU近年来发展迅速,主要厂商包括摩尔线程、壁仞科技、景嘉微、天数智芯和芯动科技等等技术进展架构设计:国产GPU厂商逐步掌握了GPU的核心技术,包括图形渲染、并行计算和AI加速等。部分企业已推出基于自主架构的GPU产品。制程工艺:部分国产GPU已采用先进制程(如7nm、12nm),与国际主流水平接近。生态支持:国产GPU正在完善对主流计算框架(如CUDA、OpenCL、Vulkan)的兼容性,并开发自主的软件栈和工具链。突破算力霸权的硬件之路华为的昇腾910芯片成功运行DeepSeek的R1、V3模型,性能与英伟达的GPU比肩。国产方案以更低的价格,吸引了大量海外用户,根据2025年2月数据显示,部署DeepSeek模型的国际服务器数量已经突破了3000台,用户群体覆盖了亚洲、欧洲和美洲多个国家。除此之外,多家国产芯片企业陆续宣布对DeepSeek模型的适配或者上架服务,包括沐曦、天数智芯、摩尔线程、海光信息、壁仞科技、云天励飞、燧原科技、昆仑芯等。DeepSeek的开源模式为国产AI芯片厂商提供了与软件开发者合作的机会。国产模型+国产芯片可以形成完整的AI闭环,加速国产AI生态的发展进程。本章重要知识点冯·诺依曼体系结构的基本思想计算机硬件的五大组成部分GPU与CPU的区别人工智能通识(理工科)北京科技大主要内容计算机软件与程序程序的执行过程Python程序语言概述Python程序中的数据表示与计算Python程序中的控制结构Python程序中的数据组织与处理Matplotlib进行绘图使用算法求解问题2.1计算机软件与程序软件:程序+文档+数据系统软件:
用来管理、维护计算机并协调计算机各部件有效工作,支持应用软件开发和运行的系统。应用软件:
实现具体应用的软件。软件操作系统硬件应用软件用户输入设备:键盘、鼠标、扫描仪等输出设备:显示器、打印机、绘图仪等外存:软盘、硬盘、光盘、U盘等
计算机系统软件外部设备系统软件硬件运算器控制器主机内存CPU随机存储器(RAM)只读存储器(ROM)操作系统:Windows、Unix、Linux编译解释程序:C、C++、Java、Python等数据库管理系统:SQLServer、Oracle服务程序:诊断程序、排错程序等应用软件办公软件包、人事管理软件、财务管理软件、工业实时控制软件、图像处理软件、聊天软件计算机系统的组成计算机软件系统指令:计算机能够识别并执行的“操作命令”。15→A
指令=操作码+操作数例:1011000000001111操作码(OP)操作数(OD)……操作数(OD)操作数(OD)指令系统:计算机能够识别的所有指令的集合。不同类型的计算机所识别的指令和指令系统是不一样的。面向机器,通用性差。计算机语言机器语言:计算机能唯一识别并可直接执行的语言,由二进制数(0或1)排列组合而成。汇编语言:用一些助记符表示指令功能的计算机语言,和机器语言基本上是一一对应的,更便于记忆。高级语言:同自然语言和数学语言比较接近的计算机程序设计语言,其表达方式更接近人们对求解过程或问题的描述方式,而且与具体的计算机指令系统无关。指令举例机器语言指令:1011000000001111
15→累加器A
0010110000001010
10+A→A
11110100结束,停机汇编语言语句:MOVA,1515→累加器AADDA,1010+A→AHLT暂停C语言语句:A=15
15→AA=A+10
15+10→A
return
结束,返回计算机语言计算机语言的发展历程MOVA,15ADDA,10汇编语言A=15A=A+10高级语言10110000000011110010110000001010机器语言执行效率高低可读性,通用性低高2.2程序的执行过程编译的方式可执行程序.EXE编译程序高级语言程序目标程序.OBJ/.O链接程序机器指令组成C/C++机器指令链接程序:将目标程序和所使用的库函数的目标程序等链接生成一个可执行文件#include"stdio.h"#include"stdlib.h"
intmain(){
printf("helloworld\n");
system("pause");}printf()函数所在目标程序system()函数所在目标程序hello.c程序的执行--编译#include"stdio.h"#include"stdlib.h"
intmain(){
printf("helloworld\n");
system("pause");}双击可以执行编译链接***.o汇编的存在.C程序汇编代码机器码给程序员看的机器码程序的执行--解释逐句读入源代码,逐句解释给出结果机器指令解释程序高级语言程序Python运行期检查源代码错误保留源代码,易于调试良好的跨平台可移植性Python解释器的工作字节码文件.pyc机器码编译与平台无关的中间代码解释执行Python源文件.py解析抽象语法树AST为了提高执行效率,CPython解释器包含一些优化机制字节码缓存:将编译后的字节码
.pyc
文件缓存到__pycache__目录中,避免重复解析和编译内置函数优化:CPython解释器对内置函数和标准库进行了高度优化,许多功能直接调用底层C实现以提高性能CPython:使用C语言编写,最常用的Python解释器(python.exe)应用程序执行的过程操作系统翻译机器指令某种CPU的指令集应用程序高级语言程序管理控制分配资源CPU各个操作系统不同,如何确定系统调用接口(调用谁、怎么调)?硬件与操作系统绑定好应用程序执行的过程2.3Python程序语言概述简单明确优雅Python是一种解释型的、面向对象的、交互式的高级程序设计语言拥有传统编译型程序语言所有强大通用的功能拥有简单脚本语言和解释型程序语言的易用性Python格言优美胜于丑陋明了胜于晦涩简单胜于复杂Python优点WhyPython?简单易学:Python是一种简单易学易用的语言,专注于解决问题而不是去搞明白语言本身。Python语言摒弃了C的复杂指针和数据类型。开发效率高:Python是一种胶水语言,可以和C、C++、Java、PHP、JS等进行组合,发挥各种工具的优势。免费、开源:Python是自由/开放源码软件之一,使用者可以自由地拷贝、阅读源代码、做改动等。跨平台:可以在多种平台下运行丰富的标准库:编程者想编写的程序,绝大多数已有现成实现,直接取用即可Python应用领域你可以在任何场合应用Python,
从网站、游戏开发、机器人、航天飞机控制……数值计算和科学计算人工智能数据开发系统编程系统维护工具用户图形接口Web开发Google
在网络搜索系统中广泛应用了Python
YouTube
视频分享服务大部分是由Python
编写的Intel
、Cisco
、HP
、Seagate
、Qualcomm
和IBM
使用Python
进行硬件测试NASA
、Los
Alamos
、Fermilab
、JPL
等使用Python
实现科学计算任务Industrial
Light
&
Magic
、Pixar
等公司使用Python
制作动画电影……Pythons
success
story
/about/success/2.4Python程序中的数据表示与计算计算机处理的数据可以是数值型和非数值型。计算机编程语言中,按编码方式与取值范围等不同,数值型数据又分为多种不同类型,包括整型和浮点型等。非数值型数据包括文本、声音、图像等。使用Python编程语言进行应用程序开发,首先应明确不同类型的数据在编程语言中的表示。2.4.1程序中的标识符【例2-1】绘制正方形程序改进。importturtle
redTurtle=turtle.Turtle()
redTurtle.width(5)
redTurtle.speed(5)color="red"
redTurtle.color(color)#设置颜色
redTurtle.forward(100)
redTurtle.right(90)#右转90度redTurtle.forward(100)
redTurtle.right(90)#右转90度color="blue"
redTurtle.color(color)#设置颜色
redTurtle.forward(100)
redTurtle.right(90)#右转90度redTurtle.forward(100)
redTurtle.right(90)#右转90度
turtle.done()用户编程时使用标识符,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。标识符是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义。标识符通常由字母和数字以及下划线构成。标识符命名规则标识符是由字符(A~Z和a~z)、下划线和数字组成,但第一个字符不能是数字。Python中的标识符中,不能包含空格、@、%以及$等特殊字符。Python中,标识符中的字母是严格区分大小写的Python语言中,以下划线开头的标识符有特殊含义,除非特定场景需要,应避免使用以下划线开头的标识符。标识符标识符有关键字和用户自定义标识符两种关键字又称保留字,关键字就是在Python内部已经使用的标识符,已被语言本身使用,具有指定的含义和使用方法,不能作其它用途使用。>>>importkeyword>>>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']用户自定义标识符是编程者根据自己的程序需要定义的标识符,不能是关键字。2.4.2程序中的常量常量是程序在运行的期间不能够被改变的量,有其固定的表示形式,这与其数据类型有关。常量有字面值常量(字面量)和自定义常量两种。字面值常量(字面量):指直接出现在代码中、可被解释器直接识别的固定值,无需预先定义即可使用。其特点是“即写即用”,值在代码中直接体现,无法被修改。例如:99,4.5,“Python”,‘hello’,True,False自定义常量:通过特定语法或约定定义的、具有名称的常量,用于表示在程序生命周期中不应改变的固定值。通常用全大写名称表示(如MIN_AGE=6)。数值数据数值数据,包括整数、带有小数点的浮点数和复数等,例如99,1.65,21.,.123整型(int)通常被称为是整型或整数,是正或负整数,不带小数点,可以使用下划线分割数字。浮点型(float)浮点数由整数部分与小数部分组成小数点的形式:22.1,35.,.0科学计数法:2.5e2表示2.5乘以102,其中2.5是尾数,2是指数。复数(complex)复数由实数部分和虚数部分构成,可以用a+bj,或者complex(a,b)表示,复数的实部a和虚部b都是浮点型。字符与字符串
字符分为非空白字符(例如,"a")和空白字符(制表符tab、空格和换回车)。字符串是不可变的多个字符构成的序列。用单引号、双引号或三引号来定界。例如:‘Python’、“Hello”、‘@’、'''Python'''Python中的字符型数据没有字符和字符串之分,只有字符串布尔型数据布尔型(bool),只有True和False两个。Python是大小写敏感的语言,True和False的首字母一定要大写。2.4.3程序中的变量变量的定义形式:
变量名=值例:color="red"变量的命名规则变量名由两个或多个单词组成时,每个单词都应使用小写字母,并且单词与单词之间用下划线连接。如:first_name。驼峰命名法:变量名由两个或多个单词组成时,还可以使用驼峰命名法来命名。小驼峰式命名法第一个单词以小写字母开始,后续单词的首字母大写。如:firstName。大驼峰式命名法每一个单词的首字母都大写。如:FirstName。变量的类型在Python中,定义变量是不需要指定数据类型的。但Python本身是有数据类型的,它的数据类型也可分为数值型和非数值型。数值型,也与常量类型一致,包括,整型(int),浮点型(float),布尔(bool,非零即真)和复数型(complex)。非数值型,包括字符串和python自带的一些数据类型,列表,元组和字典。不同类型变量之间转换Python程序中,数值型变量之间是可以直接计算的,可以进行自动类型转换,默认向更高精度转换,数据类型精度从低到高依次为:类型转换函数实现强制类型转换,例如,int(x)将x转换为一个整型,float(x)将x转换为一个浮点型。在进行计算时,布尔值True被当作1,而False被当作0来处理。boolintfloatcomplex变量操作
使用id()函数来查看变量的内存地址。每个变量的内存地址不同,都有唯一的id。使用is来判断两个值是不是属于同一个内存空间,即内存地址是否相同。使用==来判断值是否相等,与is的用法是不同的。使用input()函数来读取从键盘输入的数据,可以根据需要加入可选的提示性文字。使用eval()函数执行一个字符串表达式,返回表达式的值。算术运算用于基本数学计算。加法(+)、减法(-)和乘法(*)、除法(/):其功能与数学定义相同。整除(//):用于执行整数除法,结果会被舍入到最接近的整数,向下取整。求余(%):用于计算两个数值相除后的余数。幂运算(**):用于计算两个数的幂运算。Pa=5b=3print(a+b)#结果是8print(a-b)#结果是2print(a*b)#结果是15print(a/b)#结果是1.6666666666666667(浮点数)print(a//b)#结果是1print(a%b)#结果是2print(a**b)#结果是125(5的3次方)基本运算-算术运算:基本运算-比较运算基本运算-逻辑运算
基本运算-字符串基本运算
Python程序中,字符串运算功能非常强大,能够轻松表示和处理文本数据及应对各种自然语言处理任务。字符串是一种组合数据类型,支持多种运算和操作,包括连接、复制、索引、切片以及一些内置函数。字符串连接(+):用于将两个字符串拼接在一起。字符串复制(*):用于将字符串复制指定的次数。字符串索引:字符串是一种序列数据类型,可以使用索引访问字符串中的单个字符。字符串切片:切片用于提取字符串中的一部分,可以通过指定起始和结束索引实现。Python字符串运算代码示例如下:str1="Hello,"str2="world!"print(str1+str2)#输出"Hello,world!"str1="Hello,"print(str1*2)#输出"Hello,Hello,"str1="Hello,"print(str1[1])#输出'e'print(str1[0:5])#输出"Hello"2.4.5turtle绘图综合案例【例2-2】利用turtle绘制一个太极图。步骤一:绘制白色的鱼步骤二:绘制白鱼中黑色鱼眼步骤三:绘制黑色的鱼步骤四:绘制黑鱼中白色鱼眼turtle绘图综合案例步骤一:绘制白色的鱼fromturtleimport*#引入turtle函数库#定义画半个太极图的函数,第一个参数radius是大圆的半径,setup(500,500)#设置窗口或者画板大小#绘制白色一半width(3)#设置画笔粗细radius=200#设置画笔颜色和填充颜色#penColor,fillColor分别是画笔颜色和填充颜色,在黑白两种颜色中变化填充fillColor="white"fillcolor(fillColor)turtle绘图综合案例步骤一:绘制白色的鱼(续)begin_fill()#准备开始填充图形#首先画一个半径为radius/2,弧度为180的半圆circle(radius/2,180)#画一个半径为radius,弧度为180的半圆circle(radius,180)left(180)#将画笔方向旋转180度#画一个半径为radius/2,弧度为180的半圆,此时半径值为负,#圆心在画笔的右边circle(-radius/2,180)end_fill()#结束填充#画笔向左旋转90度,正好指向画板上方left(90)turtle绘图综合案例步骤二:绘制白鱼中黑色鱼眼up()#抬起画笔,再运动时不会留下痕迹#向前移动radius*0.35,这样小圆边线距离大圆边线上下各radius*0.35,#小圆的半径就为radius*0.15forward(radius*0.35)#画笔向右旋转90度,指向画板右侧right(90)down()#放下画笔#设置画笔颜色和填充颜色fillColor="black"fillcolor(fillColor)turtle绘图综合案例步骤二:绘制白鱼中黑色鱼眼#开始画内嵌小圆begin_fill()circle(radius*0.15)end_fill()#旋转画笔90度,指向画板上方left(90)up()#后退radius*0.35backward(radius*0.35)down()#旋转画笔90度,指向画板左方left(90)2.5Python程序中的控制结构控制结构概述顺序结构分支结构循环结构控制结构嵌套程序中的函数和模块 程序由三种基本结构组成:顺序结构,分支结构和循环结构。顺序结构流程图分支结构流程图循环结构流程图2.5.1控制结构概述2.5.2顺序结构顺序结构按照代码书写的顺序执行程序,书写的语句顺序发生变化,程序运行结果就会不同。【例2-3】改变运笔顺序重写太极图程序importturtle
t=turtle.Turtle()
fillColor='black'
t.width(3)
t.penup()
t.goto(0,-100)#设置起始坐标
t.pendown()
t.begin_fill()
t.fillcolor(fillColor)
t.circle(150,extent=180)#第二个参数是extent。是圆心角的大小,为180
t.circle(75,extent=180)#半径正负代表逆时针和顺时针画
t.circle(-75,extent=180)顺序结构例子【例2-3】改变运笔顺序重写太极图程序(续)t.end_fill()
t.circle(-150,extent=180)
t.penup()
t.goto(0,-50)
t.pendown()
t.begin_fill()
t.circle(30,extent=360)
t.end_fill()
t.penup()
t.goto(0,110)
t.pendown()
fillColor='white'
t.begin_fill()
t.fillcolor(fillColor)
t.circle(30,extent=360)
t.end_fill()
t.ht()
turtle.done()2.5.3分支结构python分支结构分为单分支结构、二分支结构、多分支结构、条件判断及组合以及程序的异常处理。1.单分支结构
单分支结构语法:if<条件>: <语句块>fromturtleimport*backgroundColor="red"ifbackgroundColor=="red":bgcolor(backgroundColor)width(5)pencolor("blue")circle(100)done()2.双分支结构双分支结构语法:if<条件>: <语句块1>else: <语句块2>双分支紧凑形式,适用于语句块可以一个表达式来描述的分支结构语法:<表达式语句1>if<条件>else<表达式语句2>双分支结构程序示例fromturtleimport*backgroundColor="red"bgcolor(backgroundColor)width(5)ifbackgroundColor=="black":pencolor("blue")else:pencolor("white")circle(100)done()pencolor("blue")ifbackgroundColor=="black"elsepencolor("white")3.多分支结构
多分支结构语法:if<条件1>:<语句块1>elif<条件2>:<语句块2>else:<语句块3>多分支结构程序示例fromturtleimport*backgroundColor="red"width(5)bgcolor(backgroundColor)ifbackgroundColor=="black":pencolor(penColor)elifbackgroundColor=="blue":pencolor("white")else:pencolor("black")circle(100)done()2.5.4循环结构1.遍历循环遍历循环是对某一个数据存储结构进行遍历形成的循环运行方式。语法:for<循环变量>in<遍历结构>: <语句块>【例2-4】应用计数循环对例2-1重复语句进行简化。importturtleturtle.width(5)turtle.speed(5)turtle.color("red")#设置颜色foriinrange(4):turtle.forward(100)turtle.right(90)#右转90度turtle.ht()turtle.done()2.While循环
While循环是由条件控制的循环运行方式。语法:while<条件>: <语句块>【例2-5】应用while循环对重复语句进行简化。importturtleturtle.width(5)turtle.speed(5)turtle.color("red")#设置颜色i=0whilei<4:turtle.forward(100)turtle.right(90)#右转90度
i=i+1turtle.ht()turtle.done()3.跳出循环控制关键字
Python中有两个控制循环执行跳转的关键字:break和continue,可以和for和while循环搭配使用break跳出并结束当前整个循环,执行循环后的语句。continue结束当次循环,继续执行后续次数循环。【例2-6】应用break控制循环结构。importturtleturtle.width(5)turtle.speed(2)turtle.color("red")#设置颜色i=0while1:ifi>=4:breakturtle.forward(100)turtle.right(90)#右转90度
i=i+1turtle.ht()turtle.done()break【例2-7】应用continue控制循环结构。importturtleturtle.width(5)turtle.speed(2)turtle.color("red")#设置颜色i=0while1:ifi>=4:continueturtle.forward(100)turtle.right(90)#右转90度i=i+1turtle.ht()turtle.done()continue4.循环的扩展for循环扩展:for<变量>in<遍历结构>: <语句块1>else: <语句块2>当循环没有通过break语句退出时,执行else语句块。else语句块作为“正常”完成循环,即控制for和while语句中控制条件不成立时,要运行的语句块。while循环扩展:while<条件>:<语句块1>else:<语句块2>【例2-8】使用循环结构控制进行turtle图形绘制fromturtleimport*speed(60)foriinrange(180):forward(i)width(i/90)left(60)#left(61)ht()done()2.5.5控制结构嵌套【例2-9】绘制多彩正方形。在例2-4的绘制正方形代码中加入一个分支判断,根据循环变量取值,调整画笔颜色即可。可以画出左右变为蓝色,上、下边为红色正方形。importturtlepen=turtle.Turtle()pen.width(5)pen.speed(5)foriinrange(4):ifi%2==0:color="red"#取一种颜色else:color="blue"#取另一种颜色pen.color(color)pen.forward(100)pen.right(90)#右转90度turtle.done()控制结构嵌套【例2-10】使用两层循环的嵌套绘制大正方形的边角为小正方的图形importturtleturtle.width(5)turtle.speed(2)turtle.color("red")turtle.left(135)#右转45度turtle.penup()turtle.goto(50,0)turtle.pendown()foriinrange(4):turtle.forward(100)turtle.right(90)forjinrange(2):turtle.forward(30)turtle.right(90)#右转90度
turtle.ht()turtle.done()控制结构嵌套2.5.6程序中的函数和模块1.函数函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码段。自定义函数定义语法:def函数名(<参数1>,<参数2>,…):
函数体
return[返回值]函数代码块以def关键词开头,后接函数名标识符和圆括号(),圆括号中是参数列表,形式是一系列变量或python结构,功能接收传入函数的的数据,通常称这些变量为形式参数,其个数顺序应该与调用时传递过来的实际参数数据一致。注意与控制一样后面的冒号是语法要求,函数体部分要求缩进。return[表达式]结束函数,选择性地返回一个值给调用的地方。不带表达式的return相当于返回None。5.3.5程序中的函数和模块【例2-11】使用函数在一个画布上绘制多个图形。importturtlet=turtle.Pen()t.speed(30)turtle.bgcolor("black")defdraw(color,sides,num):forxinrange(num):t.pencolor(color)t.forward(x*3/sides+x)t.left(360/sides+1)t.width(x*sides/200)defmov(x,y):t.penup()t.goto(x,y)t.pendown()draw("gold",1.66,80)mov(-150,150)draw"magenta",2,100)mov(-150,-150)draw("pink",3,100)mov(160,-160)draw("seashell",4,80)mov(160,160)draw("white",5,80)t.ht()turtle.done()5.3.5程序中的函数和模块2.模块为了编写可维护的代码,把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块,文件名就是模块名。模块一旦被调用,就相当于执行了另一个py文件里的代码。使用模块,可以提高代码的可维护性,而且方便被其他地方引用,通过使用模块还可以避免函数名和变量名冲突。2.6Python程序中的数据组织与处理Python中常用数据结构 简单算法 2.6.1Python中常用数据结构数据结构是指数据的组织和存储形式。合适的数据结构可以带来更高的程序运行效率和数据存储效率,也可能使得问题求解过程更为简便。Python中基本数据结构包括数元组、列表、集合和字典等。通过这些数据结构,使用者可以方便实现其它复杂的数据结构。列表list=[<元素1>,<元素2>,<元素3>,……],用中括号。列表中每个数据称为一个元素,元素是有序的,可变的,每个元素都有一个索引,从0开始,用来标记和使用各个元素,如:list[0],list[1],list[2]。
列表中的元素可以容纳Python的任何对象。列表有内部的增、删、改、查元素的方法。列表访问访问列表中元素时采用索引形式la[0]365la[-1]Truelb[1]2lb[-1]Ia,即[365,'everyday',0.618,True]lb[4][0]365如:la=[365,'everyday',0.618,True]lb=[1,2,3,4,la]列表操作列表操作功能<list>.append(x)将元素x增加到列表的最后<list>.remove(x)删除列表中第一次出现的元素x<list>.reverse()将序列元素反转<list>.sort()将列表元素排序<list>.index(x)返回第一次出现元素x的索引值列表的基本运算
连接两个列表+对列表进行整数次重复*列表中元素个数len()成员存在检查<expr>in/notin<list>列表元素遍历for<var>in<list>:la=[1,2,3]lb=['a','b','c']【例2-12】一维列表遍历打印彩色螺旋图。importturtlet=turtle.Pen()turtle.tracer(False)#不显示绘图过程colors=["red","green","blue","orange","purple"]forxinrange(200):t.pencolor(colors[x%5])t.forward(x)t.left(71)t.width(x/100+1)元组
tuple=(<元素1>,<元素2>,<元素3>,……),用小括号。Python中的元组与列表类似,不同之处在于元组不可修改,类似于字面量的列表,因此在元组中不可以使用列表中的增删改的方法,但是可以对元组中的元素进行索引,操作形式与列表相似。字典
dict={<键1:值1>,<键2:值2>……},用大括号。字典数据结构与日常使用的字典一样,通过“键值->数据值"来构建,在Python中每个元素都是带有冒号的键值与数据值的对应关系,习惯称之为键值对。字典中的元素必须是键值对的形式。键(key)不可以重复,而值(value)可以重复;键不可变,无法修改;值可以修改,可以是任何对象。字典中没有像列表那样的insert()方法,但是可以插入元素,元素默认插入在最后一个位置。如:dictColor={'A':"white",'B':"red",'C':"black",'D':"pink"}dictColor["E"]="yellow"集合
set={<元素1>,<元素2>,<元素3>,……},用大括号。集合的概念有点接近数学上的集合。每个集合中的元素是任何Python对象,但是是无序的、不重复的。2.6.2简单算法1.
插入排序插入排序是一种直观的排序算法。每次从未排好序的数据取数,将其在已排好序的数据中插入,插入的过程是从已排好序的数据末尾向前依次比较,比其小则交换后继续向前比较,否则,不交换,直至此次排序结束。重复前面过程,直到所有元素都插入完成为止。使用Python列表和双层循环结构,插入排序代码如下:li=[4,5,1,2,3,4,8]foriinrange(1,len(li)):x=li[i]j=iwhilej>0andli[j-1]>x:li[j]=li[j-1]j-=1li[j]=xprint(li)简单算法-选择排序选择排序是表现最稳定的排序算法之一。以升序排列为例,首先在未排序数据中找到最小元素,存放到排序数据的起始位置,然后,再从剩余未排序数据中继续寻找最小元素,放到已排序数据的后面。以此类推,直到所有数据均排序完毕。选择排序的Python实现代码如下:li=[4,5,1,2,3,4,8]foriinrange(len(li)-1):forjinrange(i+1,len(li)):ifli[i]>li[j]:li[i],li[j]=li[j],li[i]print(li)2.7使用Matplotlib进行绘图Matplotlib是Python中经典的绘图库,广泛用于数据可视化。2.7.1Matplotlib绘图的基本步骤使用Matplotlib绘制的图形包含几个基本部分,分别如下:Figure(图形):指整个图表的区域,包含所有的内容(图形、标题、坐标轴等)。Axes(坐标轴):每个图形可以有一个或多个坐标轴。Ticks(刻度):坐标轴上的标记,表示数据的不同取值。Legends(图例):用于标识图形中的不同数据系列,帮助用户理解图示。Matplotlib绘图过程通常有几个基本步骤:准备数据:使用NumPy或其他数据处理工具生成数据。创建图形:使用plt.figure()创建一个新的图形。绘制图形:用plt.plot(),plt.scatter(),plt.bar()等功能来绘制不同风格的图形。自定义图形:添加标题、坐标轴标签、图例等,增强可读性。显示或保存图形:通过plt.show()展示图形,或使用plt.savefig()保存到磁盘上以文件存储。2.7.2Matplotlib常见图形类型折线图(LinePlot)折线图是最常用的可视化形式之一,适合展示数据的变化趋势。【例2-13】基于Matplotlib绘制正弦函数图形。使用numpy.linspace()函数生成一组从0到10的等间距的数值共100个点,作为x轴的坐标。利用NumPy的np.sin()数计算每个x值对应的正弦值,结果存储在y列表。Python代码如下:importnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(0,10,100)#生成从0到10的100个数值y=np.sin(x)#计算x的正弦值'''使用matplotlib.pyplot.plot()函数绘制x和y的折线图。plt.plot(x,y)会自动连接每个点,形成连续的曲线,展示正弦波形。'''plt.plot(x,y)#绘制折线图plt.title('SinFunction')#设置图形标题为“SinFunction”plt.xlabel('X-axis')#为轴添加标签plt.ylabel('Y-axis')#为Y轴添加标签plt.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025 高中信息技术数据与计算之数据在社交媒体用户信任网络分析中的应用课件
- 社区春季健康防护课件
- 农业遥感监测技术及应用
- 绿色农产品标准化生产与质量管控体系
- 2026年eVTOL应急救援场景任务规划与调配
- 2026年理财公司 消费金融公司 汽车金融公司纳入列举范围的法律适用
- 2026年智能监测防走失设备与陪伴机器人开发路径
- 2026年电网末端季节性过载地区储能应急保供方案
- 2026年海外仓员工绩效考核与计件工资设计方案
- 2026年热塑性淀粉TPS与淀粉基聚合物共混物改性技术
- 2026年3月广西桂林市七星区专职化社区工作者招聘26人考试参考试题及答案解析
- 2026年湖南张家界桑植县招聘20名城市社区专职工作者笔试备考试题及答案解析
- 2025-2026学年冀教版(2024)小学信息技术四年级上册(全册)教学设计(附目录P178)
- 2026山东铁路投资控股集团有限公司招聘80人考试备考试题及答案解析
- 融媒体中心廉政监督制度
- 智研咨询发布:中国基因编辑行业市场现状及投资前景分析报告
- 2026春小学美术岭南版(2024)三年级下册美术教学计划、教案及每课教学反思(附目录)
- 人力资源服务行业安全生产应急预案
- 2025早产儿经口喂养临床实践专家共识解读课件
- 2026湖南省卫生健康委直属事业单位招聘185人考试备考试题及答案解析
- 2026广东茂名市化州市村(社区)后备干部选聘321人笔试备考题库及答案解析
评论
0/150
提交评论