处理配对和拆分内容 |【python技能树知识点1~2 习题分析】
目录
- 一、编程语言简史(配对)
- 题目要求:
- 程序设计:
- 二、 编程语言发明家(拆分)
- 题目要求
- 程序实现
- while和for循环
python技能树知识点中的一些习题练习和分析。熟悉python编程模式和逻辑。
一、编程语言简史(配对)
题目要求:
历史上有很多编程语言,他们在编程语言发展的过程中都起到过重要的作用。
下面的 Python 数组包含了历史上的大部分编程语言。
languages = [“Regional Assembly Language”,“Autocode”,“FORTRAN”,“IPL (LISP的先驱)”,“FLOW-MATIC (COBOL的先驱)”,“COMTRAN (COBOL的先驱)”,“LISP”,“ALGOL 58”,“FACT (COBOL的先驱)”,“COBOL”,“APL”,“Simula”,“SNOBOL”,“CPL (C的先驱)”,“BASIC”,“PL/I”,“BCPL (C的先驱)”,“Logo”,“Pascal”,“Forth”,“C语言”,“Smalltalk”,“Prolog”,“ML”,“Scheme”,“SQL”,“Ada”,“C++”,“Common Lisp”,“MATLAB”,“Eiffel”,“Objective-C”,“Erlang”,“Perl”,“Tcl”,“FL (Backus)”,“Haskell”,“Python”,“Visual Basic”,“HTML”,“Ruby”,“Lua”,“CLOS (part of ANSI Common Lisp)”,“Java”,“Delphi (Object Pascal)”,“JavaScript”,“PHP”,“REBOL”,“D”,“C#”,“Visual Basic .NET”,“F#”,“Scala”,“Factor”,“Windows PowerShell”,“Rust”,“Clojure”,“Go”]
下面的 Python 数组包含了这些编程对应的创建时间。
years = [1951, 1952, 1954, 1954, 1955, 1957, 1958, 1958, 1959, 1959, 1962, 1962, 1962, 1963, 1964, 1964, 1967 ,1968 ,1970 ,1970 ,1972 ,1972 ,1972 ,1973 ,1975 ,1978 ,1980 ,1983 ,1984 ,1984 ,1985 ,1986 ,1986 ,1987 ,1988 ,1989 ,1990 ,1991 ,1991 ,1991 ,1993 ,1993 ,1994 ,1995 ,1995 ,1995 ,1995 ,1997 ,1999 ,2001 ,2001 ,2002 ,2003 ,2003 ,2006 ,2006 ,2007 ,2009]
编写一个 Python 程序,每行打印每个编程语言的名字和对应的创建时间,例如:
Regional Assembly Language : 1951
Autocode : 1952
FORTRAN : 1954
…
程序设计:
languages = ["Regional Assembly Language","Autocode","FORTRAN","IPL (LISP的先驱)","FLOW-MATIC (COBOL的先驱)","COMTRAN (COBOL的先驱)","LISP","ALGOL 58","FACT (COBOL的先驱)","COBOL","APL","Simula","SNOBOL","CPL (C的先驱)","BASIC","PL/I","BCPL (C的先驱)","Logo","Pascal","Forth","C语言","Smalltalk","Prolog","ML","Scheme","SQL","Ada","C++","Common Lisp","MATLAB","Eiffel","Objective-C","Erlang","Perl","Tcl","FL (Backus)","Haskell","Python","Visual Basic","HTML","Ruby","Lua","CLOS (part of ANSI Common Lisp)","Java","Delphi (Object Pascal)","JavaScript","PHP","REBOL","D","C#","Visual Basic .NET","F#","Scala","Factor","Windows PowerShell","Rust","Clojure","Go"]years = [1951, 1952, 1954, 1954, 1955, 1957, 1958, 1958, 1959, 1959, 1962, 1962, 1962, 1963, 1964, 1964, 1967 ,1968 ,1970 ,1970 ,1972 ,1972 ,1972 ,1973 ,1975 ,1978 ,1980 ,1983 ,1984 ,1984 ,1985 ,1986 ,1986 ,1987 ,1988 ,1989 ,1990 ,1991 ,1991 ,1991 ,1993 ,1993 ,1994 ,1995 ,1995 ,1995 ,1995 ,1997 ,1999 ,2001 ,2001 ,2002 ,2003 ,2003 ,2006 ,2006 ,2007 ,2009]#第一种
if __name__ == '__main__':i = 0while i < len(years):language = languages[i]year = years[i]print(language, ':', year)i += 1#第2种
if __name__ == '__main__':for i in range(0, len(languages)):language = languages[i]year = years[i]print(language, ':', year)#第3种
if __name__ == '__main__':[print(languages[i], ':', years[i]) for i in range(0, len(languages))]
二、 编程语言发明家(拆分)
题目要求
我们先分析一个例子,解析这个文本数据:"吉多·范罗苏姆(Guido van Rossum), 创造了 Python"。首先,定义一个函数 parse_parts,通过第一个逗号,拆分出发明家的名字信息和成就信息。
其次,定义一个函数 parse_name,通过对name的进一步拆分,获得发明家的中英文名字信息。
最后,定义一个函数 parse_creators,完成解析。
完整的代码模版如下:# -*- coding: UTF-8 -*-
def parse_parts(creator):index = creator.find(',')name, achievement = creator[0:index], creator[index+1:]return name.strip(), achievement.strip()def parse_name(name):index = name.find('(')name_cn, name_en = name[0:index], name[index:]name_en = name_en[1:len(name_en)-1]return name_cn, name_endef parse_creators(creators):# TODO(YOU): 请在此处正确实现if __name__ == '__main__':creators = ...profiles = parse_creators(creators)print(profiles)
请补充对函数parse_creators的实现。
程序实现
programmers = ["约翰·巴科斯(JohnWarnerBackus), 创建了Fortran语言","阿兰·库珀(Alan Cooper), 开发了Visual Basic语言","詹姆斯·高斯林(James Gosling), 开发了Java语言","安德斯·海尔斯伯格(Anders Hejlsberg), 开发了Turbo Pascal、Delphi、C#以及TypeScript","丹尼斯·里奇(Dennis MacAlistair Ritchie), 发明了C语言","比雅尼·斯特劳斯特鲁普(Bjarne Stroustrup), 他以创造C++编程语言而闻名,被称为“C++之父”","吉多·范罗苏姆(Guido van Rossum), 创造了 Python"
]# -*- coding: UTF-8 -*-
def parse_parts(creator):index = creator.find(',')name, achievement = creator[0:index], creator[index+1:]return name.strip(), achievement.strip()def parse_name(name):index = name.find('(')name_cn, name_en = name[0:index], name[index:]name_en = name_en[1:len(name_en)-1]return name_cn, name_en#def parse_creators(creators):# TODO(YOU): 请在此处正确实现if __name__ == '__main__':creators = programmers # 确保这里使用的是 programmers 列表profiles = parse_creators(creators)print(profiles)
分析函数parse_creators的用途:用来解析一个名为 creators 的列表,其中每个元素 creator 包含有关人物的信息。这些代码的目的是将这些信息转换成一个包含中文名字、英文名字和成就的字典列表。
使用四种方式实现:
第一种:
def parse_creators(creators):profiles = []for creator in creators:name, achievement = parse_parts(creator)name_cn, name_en = parse_name(name)profiles.append({ 'name_cn': name_cn, 'name_en': name_en, 'achievement': achievement })return profiles
首先 定义了一个 parse_creators 函数,它遍历 creators 列表中的每个元素,对每个元素调用 parse_parts 函数来解析出名字和成就,然后调用 parse_name 函数来进一步解析出中文名字和英文名字。最后,它将这些信息作为一个字典添加到 profiles 列表中,并返回这个列表。
第二种:
def parse_profile(creator):name, achievement = parse_parts(creator)name_cn, name_en = parse_name(name)return { 'name_cn': name_cn, 'name_en': name_en, 'achievement': achievement }def parse_creators(creators):return [ parse_profile(creator) for creator in creators]
首先定义了一个 parse_profile 函数,它接收一个 creator 元素,解析出中文名字、英文名字和成就,并返回一个包含这些信息的字典。然后,parse_creators 函数使用列表推导式来创建一个列表,其中的每个元素都是通过调用 parse_profile 函数得到的字典。这种方法更加简洁,利用了列表推导式来简化循环和列表构建的过程。
第三种:
def parse_profile(creator):name, achievement = parse_parts(creator)name_cn, name_en = parse_name(name)return { 'name_cn': name_cn, 'name_en': name_en, 'achievement': achievement }def parse_creators(creators):profiles = []for creator in creators:profile = parse_profile(creator)profiles.append(profile)return profiles
第三种与第二种非常相似,唯一的区别在于 parse_creators 函数的实现。这里,parse_creators 函数使用一个显式的循环来构建 profiles 列表,而不是使用列表推导式。这种方法与第一种代码类似,但是它调用了 parse_profile 函数来处理每个 creator 元素,而不是直接在循环中解析每个元素。
第四种
def parse_creators(creators):profiles = []i = 0while i < len(creators):creator = creators[i]name, achievement = parse_parts(creator)name_cn, name_en = parse_name(name) # 分离中文名和英文名profiles.append({ 'name_cn': name_cn, 'name_en': name_en, 'achievement': achievement })i += 1return profiles
使用 while 循环来遍历 creators 列表。这段代码使用了一个显式的索引 i 来遍历 creators列表。它在每次循环的末尾手动增加索引 i 的值。这种方式给了你更多的控制权,比如在循环体中可以轻松地修改循环变量 i(虽然在这个例子中没有这样做)。
总结:
第一种方式直接在 parse_creators 函数中处理所有解析逻辑。
第二种方式通过定义一个辅助函数 parse_profile 来简化parse_creators 函数的实现,使用列表推导式来提高代码的简洁性。
第三种方式也定义了 parse_profile 函数,但是在parse_creators 函数中使用显式循环而不是列表推导式。
第四种方式使用 while 循环来遍历 creators 列表。一般情况下, for 循环和列表推导式是处理列表遍历的首选方式,因为它们更简洁、更易于理解。然而,while 循环在需要更复杂的控制流时是一个有用的工具。
列表推导式通常更简洁,但有时显式循环可能更易于理解和调试。
while和for循环
1、控制流:
- 使用 while 循环可以让你在循环体中有更多的控制权,例如,可以在循环体中根据需要修改索引 i 的值,或者在不满足条件时提前退出循环(通过 break 语句)。
- for 循环和列表推导式通常更简洁,但它们不提供这样的灵活性。
2、可读性:
- 对于简单的遍历,for 循环和列表推导式通常被认为更易读,因为它们直接表达了“对列表中的每个元素做某事”的意图。
- while 循环可能在某些情况下更易于理解,尤其是当你需要在循环中进行复杂的状态管理或者需要多个退出条件时。
3、性能:
- 在这个特定的例子中,使用 while 循环、for 循环或列表推导式的性能差异可以忽略不计,因为它们都是线性时间复杂度的遍历操作。
- 然而,在某些情况下,for 循环和列表推导式可能会略微快一些,因为它们是Python的内置结构,可能被优化得更好。
4、代码风格:
- while的风格更接近于传统的命令式编程,其中显式地管理循环变量和循环控制结构。
- 而 for 循环和列表推导式则更符合Python的风格,它们通常更简洁、更Pythonic。
相关文章:
处理配对和拆分内容 |【python技能树知识点1~2 习题分析】
目录 一、编程语言简史(配对)题目要求:程序设计: 二、 编程语言发明家(拆分)题目要求程序实现while和for循环 python技能树知识点中的一些习题练习和分析。熟悉python编程模式和逻辑。 一、编程语言简史&am…...
HBuilderX自定义Vue3页面模版
HBuilderX自定义Vue3页面模版 首先在HBuilderX工具下的任意一个项目添加新建自定义页面模版 新建模版文件,并打开进行编辑 vue3-setup-js.vue文件里填写样式模版(根据自己的需要进行修改) <template><view class"">&…...
计算机网络——TCP中的流量控制和拥塞控制
TCP中的流量控制和拥塞控制 流量控制 什么是流量控制 如果发送者发送数据过快,接收者来不及接收,那么就会出现分组丢失,为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。 …...
BFV/BGV全同态加密方案浅析
本文主要为翻译内容,原文地址:Introduction to the BFV encryption scheme、https://www.inferati.com/blog/fhe-schemes-bgv 之前的一篇博客我们翻译了CKKS全同态加密方案的内容,但该篇上下文中有一些知识要点,作者在BFV/BGV中已…...
Elasticsearch 实战应用详解!
Elasticsearch 实战应用详解 一、概述 Elasticsearch 是一个高度可扩展的开源全文搜索引擎,它能够处理大量数据并提供实时搜索和分析能力。基于 Lucene 构建,Elasticsearch 通过简单的 RESTful API 接口隐藏了 Lucene 的复杂性,使全文搜索变…...
最新最全面的JAVA面试题免费下载
面对求职市场的激烈竞争,掌握全面且深入的Java知识已成为每一位Java开发者必不可少的技能。《2023最新版Java面试八股文》是一份精心整理的面试准备资料,旨在帮助广大开发者系统复习,从容应对Java及相关技术栈的面试挑战。这份文档不仅汇聚了…...
修改sql server 数据库的排序规则
文章目录 引言I 解决方案案例II 知识扩展排序规则SQL SERVER支持的所有排序规则引言 新增sql server 数据库实例的默认排序规则不支持中文存储,导致乱码 解决方案: 修改排序规则为Chinese_PRC_CI_AS 或者 Chinese_PRC_Stroke_CI_AS_WS或者Chinese_PRC_CI_AI_KS_WS 仅对新增…...
Node学习记录-until实用工具
来源:Nodejs 第十八章(util) util 是Node.js内部提供的很多实用或者工具类型的API util.promisify 用于将遵循Node回调风格(即最后一个参数为回调函数)的函数转换成返回Promise的函数,这样可以使得异步代…...
【Mac】安装 VMware Fusion Pro
VMware Fusion Pro 软件已经正式免费提供给个人用户使用! 1、下载 【官网】 下拉找到 VMware Fusion Pro Download 登陆账号 如果没有账号,点击右上角 LOGIN ,选择 REGISTER 注册信息除了邮箱外可随意填写 登陆时,Username为…...
解决go run main.go executable file not found in %PATH%
项目场景: 命令行执行go run 都会报 executable file not found in %PATH% 问题描述 最近我发现,我通过命令行,无论是跑什么go文件,都会出现这个错误。但是我通过我的IDE就能跑,于是我也没有管它。 但是最近&#x…...
C++ 手写常见的任务定时器
序言 最近在编写 C 的服务器代码时,我遇到了一个需求,服务器很可能会遇到那些长期不活跃的连接,这些连接占用了一定的资源但是并没有进行有效的通信。为了优化资源使用,我决定实现一个定时器,以便定期检查连接的活跃状…...
【VS+QT】联合开发踩坑记录
最新更新日期:2024/11/05 0. 写在前面 因为目前在做自动化产线集成软件开发相关的工作,需要用到QT,所以选择了VS联合开发,方便调试。学习QT的过程中也踩了很多坑,在此记录一下,提供给各位参考。 1. 环境配…...
PH热榜 | 2024-11-05
DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论、搜索等功能,欢迎大家体验。 Github:https://github.com/LaughingZhu/DevNow 1. FullContext 标语:用自然语言,让你的市场推广流…...
模拟机器人逐字回答,类似于实时回话
代码如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head><…...
Java学习路线:JUL日志系统(一)日志框架介绍
目录 打印日志 日志的级别 打印文件 日志过滤器 日志输出流程 首先,为什么要使用日志系统? 如果单纯地用System.out.println打印信息,如果项目比较大,存在大量的信息就会显得非常凌乱。 而且,当我们希望在debug的…...
[渲染层网络层错误] net::ERR_CONTENT_LENGTH_MISMATCH 问题解决
问题描述 问题背景 微信小程序访问后端img资源的时候,偶尔出现这个感叹号,图片加载不出来,但是对应的url贴出来在浏览器中访问,或者重新加载是可以访问的。 错误描述 经查询前端报错 [渲染层网络层错误] net::ERR_CONTENT_LE…...
C 语言编程中的常见错误及解决方案
在 C 语言开发中,编译和链接错误是常见的问题,尤其是在处理多个源文件时。本文将总结一些常见的错误,并提供相应的解决方案,以帮助开发者更高效地排查和修复这些问题。 1. 结构体作用域问题 问题描述 在函数参数列表中定义结构体…...
开源模型应用落地-glm模型小试-glm-4-9b-chat-批量推理(二)
一、前言 GLM-4是智谱AI团队于2024年1月16日发布的基座大模型,旨在自动理解和规划用户的复杂指令,并能调用网页浏览器。其功能包括数据分析、图表创建、PPT生成等,支持128K的上下文窗口,使其在长文本处理和精度召回方面表现优异&a…...
【C++篇】数据之林:解读二叉搜索树的优雅结构与运算哲学
文章目录 二叉搜索树详解:基础与基本操作前言第一章:二叉搜索树的概念1.1 二叉搜索树的定义1.1.1 为什么使用二叉搜索树? 第二章:二叉搜索树的性能分析2.1 最佳与最差情况2.1.1 最佳情况2.1.2 最差情况 2.2 平衡树的优势 第三章&a…...
C#-类:声明类、声明类对象
一:类的声明 class 类名 {//特征——成员变量//行为——成员方法//保护特征——成员属性//构造函数和析构函数//索引器//运算符重载//静态成员 }类名:帕斯卡 同一个语句块中的不同类 不能重名 二:声明类对象 2.1 类的声明 ≠ 类对象的声…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
