处理配对和拆分内容 |【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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/465179.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java项目之校园周边美食探索及分享平台(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园周边美食探索及分享平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 校园周边美食…

stack和queue --->容器适配器

不支持迭代器&#xff0c;迭代器无法满足他们的性质 边出边判断 实现 #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<stack> #include<queue> using namespace std; int main() {stack<int> st;st.push(1);st.push(2);st.push(3);…

vue3动态监听div高度案例

案例场景 场景描述&#xff1a;现在左边的线条长度需要根据右边盒子的高度进行动态变化 实践代码案例 HTML部分 <div v-for"(device, index) in devices" :key"index"><!-- 动态设置 .left-bar 的高度 --><div class"left-bar"…

华为OD机试真题(Python/JS/C/C++)- 考点 - 细节

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题 点这里。 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。

Spring源码学习(五):Spring AOP

免责声明 本人还处于学习阶段&#xff0c;如果内容有错误麻烦指出&#xff0c;敬请见谅&#xff01;&#xff01;&#xff01;Demo <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.8<…

vue 使用docx-preview 预览替换文档内的特定变量

在开发合同管理中&#xff0c;需要使用到此功能&#xff0c;就是替换合同模板内的一些字符串&#xff0c;如&#xff1a;甲乙方名称&#xff0c;金额日期等&#xff0c;合同内容不变。效果如下&#xff1a; 使用docx-preview 好处是只预览不可编辑内容。 前端vue import { re…

若依项目搭建

若依的大版本 基本环境搭建 搭建注意点

(11)(2.1.6) Hobbywing DroneCAN ESC(二)

文章目录 前言 2 配置ESC 3 测试 4 设置视频 5 参数说明 前言 具有 CAN 接口&#xff08;including these&#xff09;的业余 ESC 支持 DroneCAN&#xff0c;它允许自动驾驶仪通过 CAN 控制 ESC /电机&#xff0c;并检索单个转速、电压、电流和温度。 2 配置ESC 默认情…

JVM结构图

JVM&#xff08;Java虚拟机&#xff09;是Java编程语言的核心组件之一&#xff0c;负责将Java字节码翻译成机器码并执行。JVM由多个子系统组成&#xff0c;包括类加载子系统、运行时数据区、执行引擎、Java本地接口和本地方法库。 类加载子系统&#xff08;Class Loading Subsy…

【智能算法改进】混沌映射策略--一网打尽

摘要 本文研究了多种混沌映射策略在智能算法中的改进效果&#xff0c;提出了一种综合不同混沌映射策略的多元混合方法&#xff0c;以提高算法的全局优化能力和收敛速度。通过引入不同的混沌映射&#xff08;如 Logistic、Tent、Sine 等&#xff09;生成初始种群分布&#xff0…

QML —— QML调用C++两种方法(附完整测试源码)

代码效果 说明 QML 其实是对JavaScript 的扩展,融合了Qt Object 系统,它是一种新的解释型的语言, QML 引擎虽然由Qt C++ 实现,但QML 对象的运行环境,说到底和C++ 对象的上下文环境是不同的,是平行的两个世界。如果你想在QML 中访问C++ 对象,那么必然要找到一种途径来在两…

剧本杀小程序,市场发展下的新机遇

剧本杀作为休闲娱乐的一种游戏方式&#xff0c;在短时间内进入了大众视野中&#xff0c;受到了广泛关注。近几年&#xff0c;剧本杀行业面临着创新挑战&#xff0c;商家需求寻求新的发展机遇&#xff0c;在市场饱和度下降的趋势下&#xff0c;获得市场份额。 随着科技的不断进…

mysql error:1449权限问题 及 用户授权

一、权限问题 Got error: 1449: The user specified as a definer (skip-grants userskip-grants host) does not exist when using LOCK TABLES 在迁移数据库时&#xff0c;定义的definer&#xff0c;在两个数据库之间不同步时&#xff0c;要将不存在的definer改成数据库中已…

Spark 的Standalone集群环境安装与测试

目录 一、Standalone 集群环境安装 &#xff08;一&#xff09;理解 Standalone 集群架构 &#xff08;二&#xff09;Standalone 集群部署 二、打开监控界面 &#xff08;一&#xff09;master监控界面 &#xff08;二&#xff09;日志服务监控界面 三、集群的测试 &a…

基于SpringBoot+Vue实现新零售商城系统

作者主页&#xff1a;编程千纸鹤 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参…

SAP RFC 用户安全授权

一、SAP 通讯用户 对于RFC接口的用户&#xff0c;使用五种用户类型之一的“通讯”类型&#xff0c;这种类型的用户没有登陆SAPGUI的权限。 二、对调用的RFC授权 在通讯用户内部&#xff0c;权限对象&#xff1a;S_RFC中&#xff0c;限制进一步可以调用的RFC函数授权&#xff…

【Java Web】搭建Web环境以及初识JSP Tomcat

文章目录 程序架构Web服务器TomcatJSP概述主要特点基本语法综合示例程序调试和排错 代码示例 程序架构 C/S&#xff08;Client/Server&#xff0c;客户端/服务器&#xff09;和 B/S&#xff08;Browser/Server&#xff0c;浏览器/服务器&#xff09;是两种常见的软件系统架构模…

如何建购物网站提升用户体验

在构建一个购物网站时&#xff0c;用户体验是至关重要的&#xff0c;它直接影响到顾客的满意度和转化率。为了提升用户体验&#xff0c;可以从以下几个方面入手。 首先&#xff0c;网站设计应简洁明了。确保导航栏清晰易懂&#xff0c;让用户在寻找商品时不会迷失。此外&#x…

qt QTableView详解

1、概述 QTableView 是 Qt 框架中的一个高级视图类&#xff0c;用于以表格形式展示二维数据。它基于 QAbstractItemView&#xff0c;并与模型&#xff08;通常是 QAbstractTableModel 或 QStandardItemModel&#xff09;结合使用&#xff0c;以实现数据的展示和交互。QTableVi…

Android TextView自动换行文本显示不全解决

某些情况下&#xff0c;TextView自动换行后&#xff0c;会出现每行结尾处显示不全的问题&#xff0c; 如图&#xff1a; 常见解决方案&#xff1a; 设置TextView的“ellipsize”属性为“end” 实测无效&#xff01;将TextView外部的Layout改为RelativeLayout 实测无效&…