当前位置: 首页 > news >正文

处理配对和拆分内容 |【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 习题分析】

目录 一、编程语言简史&#xff08;配对&#xff09;题目要求&#xff1a;程序设计&#xff1a; 二、 编程语言发明家&#xff08;拆分&#xff09;题目要求程序实现while和for循环 python技能树知识点中的一些习题练习和分析。熟悉python编程模式和逻辑。 一、编程语言简史&am…...

HBuilderX自定义Vue3页面模版

HBuilderX自定义Vue3页面模版 首先在HBuilderX工具下的任意一个项目添加新建自定义页面模版 新建模版文件&#xff0c;并打开进行编辑 vue3-setup-js.vue文件里填写样式模版&#xff08;根据自己的需要进行修改&#xff09; <template><view class"">&…...

计算机网络——TCP中的流量控制和拥塞控制

TCP中的流量控制和拥塞控制 流量控制 什么是流量控制 如果发送者发送数据过快&#xff0c;接收者来不及接收&#xff0c;那么就会出现分组丢失&#xff0c;为了避免分组丢失&#xff0c;控制发送者的发送速度&#xff0c;使得接收者来得及接收&#xff0c;这就是流量控制。 …...

BFV/BGV全同态加密方案浅析

本文主要为翻译内容&#xff0c;原文地址&#xff1a;Introduction to the BFV encryption scheme、https://www.inferati.com/blog/fhe-schemes-bgv 之前的一篇博客我们翻译了CKKS全同态加密方案的内容&#xff0c;但该篇上下文中有一些知识要点&#xff0c;作者在BFV/BGV中已…...

Elasticsearch 实战应用详解!

Elasticsearch 实战应用详解 一、概述 Elasticsearch 是一个高度可扩展的开源全文搜索引擎&#xff0c;它能够处理大量数据并提供实时搜索和分析能力。基于 Lucene 构建&#xff0c;Elasticsearch 通过简单的 RESTful API 接口隐藏了 Lucene 的复杂性&#xff0c;使全文搜索变…...

最新最全面的JAVA面试题免费下载

面对求职市场的激烈竞争&#xff0c;掌握全面且深入的Java知识已成为每一位Java开发者必不可少的技能。《2023最新版Java面试八股文》是一份精心整理的面试准备资料&#xff0c;旨在帮助广大开发者系统复习&#xff0c;从容应对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实用工具

来源&#xff1a;Nodejs 第十八章&#xff08;util&#xff09; util 是Node.js内部提供的很多实用或者工具类型的API util.promisify 用于将遵循Node回调风格&#xff08;即最后一个参数为回调函数&#xff09;的函数转换成返回Promise的函数&#xff0c;这样可以使得异步代…...

【Mac】安装 VMware Fusion Pro

VMware Fusion Pro 软件已经正式免费提供给个人用户使用&#xff01; 1、下载 【官网】 下拉找到 VMware Fusion Pro Download 登陆账号 如果没有账号&#xff0c;点击右上角 LOGIN &#xff0c;选择 REGISTER 注册信息除了邮箱外可随意填写 登陆时&#xff0c;Username为…...

解决go run main.go executable file not found in %PATH%

项目场景&#xff1a; 命令行执行go run 都会报 executable file not found in %PATH% 问题描述 最近我发现&#xff0c;我通过命令行&#xff0c;无论是跑什么go文件&#xff0c;都会出现这个错误。但是我通过我的IDE就能跑&#xff0c;于是我也没有管它。 但是最近&#x…...

C++ 手写常见的任务定时器

序言 最近在编写 C 的服务器代码时&#xff0c;我遇到了一个需求&#xff0c;服务器很可能会遇到那些长期不活跃的连接&#xff0c;这些连接占用了一定的资源但是并没有进行有效的通信。为了优化资源使用&#xff0c;我决定实现一个定时器&#xff0c;以便定期检查连接的活跃状…...

【VS+QT】联合开发踩坑记录

最新更新日期&#xff1a;2024/11/05 0. 写在前面 因为目前在做自动化产线集成软件开发相关的工作&#xff0c;需要用到QT&#xff0c;所以选择了VS联合开发&#xff0c;方便调试。学习QT的过程中也踩了很多坑&#xff0c;在此记录一下&#xff0c;提供给各位参考。 1. 环境配…...

PH热榜 | 2024-11-05

DevNow 是一个精简的开源技术博客项目模版&#xff0c;支持 Vercel 一键部署&#xff0c;支持评论、搜索等功能&#xff0c;欢迎大家体验。 Github&#xff1a;https://github.com/LaughingZhu/DevNow 1. FullContext 标语&#xff1a;用自然语言&#xff0c;让你的市场推广流…...

模拟机器人逐字回答,类似于实时回话

代码如下 <!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日志系统(一)日志框架介绍

目录 打印日志 日志的级别 打印文件 日志过滤器 日志输出流程 首先&#xff0c;为什么要使用日志系统&#xff1f; 如果单纯地用System.out.println打印信息&#xff0c;如果项目比较大&#xff0c;存在大量的信息就会显得非常凌乱。 而且&#xff0c;当我们希望在debug的…...

[渲染层网络层错误] net::ERR_CONTENT_LENGTH_MISMATCH 问题解决

问题描述 问题背景 微信小程序访问后端img资源的时候&#xff0c;偶尔出现这个感叹号&#xff0c;图片加载不出来&#xff0c;但是对应的url贴出来在浏览器中访问&#xff0c;或者重新加载是可以访问的。 错误描述 经查询前端报错 [渲染层网络层错误] net::ERR_CONTENT_LE…...

C 语言编程中的常见错误及解决方案

在 C 语言开发中&#xff0c;编译和链接错误是常见的问题&#xff0c;尤其是在处理多个源文件时。本文将总结一些常见的错误&#xff0c;并提供相应的解决方案&#xff0c;以帮助开发者更高效地排查和修复这些问题。 1. 结构体作用域问题 问题描述 在函数参数列表中定义结构体…...

开源模型应用落地-glm模型小试-glm-4-9b-chat-批量推理(二)

一、前言 GLM-4是智谱AI团队于2024年1月16日发布的基座大模型&#xff0c;旨在自动理解和规划用户的复杂指令&#xff0c;并能调用网页浏览器。其功能包括数据分析、图表创建、PPT生成等&#xff0c;支持128K的上下文窗口&#xff0c;使其在长文本处理和精度召回方面表现优异&a…...

【C++篇】数据之林:解读二叉搜索树的优雅结构与运算哲学

文章目录 二叉搜索树详解&#xff1a;基础与基本操作前言第一章&#xff1a;二叉搜索树的概念1.1 二叉搜索树的定义1.1.1 为什么使用二叉搜索树&#xff1f; 第二章&#xff1a;二叉搜索树的性能分析2.1 最佳与最差情况2.1.1 最佳情况2.1.2 最差情况 2.2 平衡树的优势 第三章&a…...

C#-类:声明类、声明类对象

一&#xff1a;类的声明 class 类名 {//特征——成员变量//行为——成员方法//保护特征——成员属性//构造函数和析构函数//索引器//运算符重载//静态成员 }类名&#xff1a;帕斯卡 同一个语句块中的不同类 不能重名 二&#xff1a;声明类对象 2.1 类的声明 ≠ 类对象的声…...

【AIGC】ChatGPT提示词Prompt高效编写技巧:逆向拆解OpenAI官方提示词

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;OpenAI官方提示词的介绍OpenAI官方提示词的结构与组成如何通过分析提示词找到其核心组件 &#x1f4af;OpenAI官方提示词分析案例一&#xff1a;制定教学计划案例二&…...

【linux】端口监听和终止进程

端口监听和终止进程 有时候&#xff0c;即使进程看起来已经关闭&#xff0c;它可能仍然占用着端口。你可以使用 netstat -tulpn | grep <端口号> 来查看哪个进程正在使用该端口&#xff0c;然后使用 kill -9 来强制关闭该进程。 [naienotebook-npu-b1bb152e-7655cb9d4…...

【网络安全】|kali中安装nessus

1、使用 df -h 命令查看磁盘使用情况&#xff0c;确保磁盘容量大于40G 简单粗暴办法&#xff1a;重装系统&#xff0c;装系统中注意磁盘空间相关的选项 //磁盘扩容&#xff1a;https://wiki.bafangwy.com/doc/670/ 2、安装 nessus 安装教程 https://blog.csdn.net/Cairo_A/a…...

Docker可视化管理面板DPanel的安装

本文软件由网友 rui 推荐&#xff1b; 什么是 DPanel &#xff1f; DPanel 是一款 Docker 可视化管理面板&#xff0c;旨在简化 Docker 容器、镜像和文件的管理。它提供了一系列功能&#xff0c;使用户能够更轻松地管理和部署 Docker 环境。 软件特点&#xff1a; 可视化管理&…...

【android12】【AHandler】【3.AHandler原理篇AHandler类方法全解】

AHandler系列 【android12】【AHandler】【1.AHandler异步无回复消息原理篇】-CSDN博客 【android12】【AHandler】【2.AHandler异步回复消息原理篇】-CSDN博客 其他系列 本人系列文章-CSDN博客 1.简介 前面两篇我们主要介绍了有回复和无回复的消息的使用方法和源码解析&a…...

使用Docker Compose构建多容器应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Docker Compose构建多容器应用 引言 Docker Compose 简介 安装 Docker Compose 创建基本配置 运行多容器应用 查看服务状态 …...

面试知识目录

面试知识目录 八股文 java基础 java反射java HashMap面向对象多线程虚拟机内存 SpringMybatisMySQLPostgresqlSQL优化Nosql...

Rust移动开发:Rust在Android端集成使用介绍

Andorid调用Rust 目前Rust在移动端上的应用&#xff0c;一般作为应用sdk的提供&#xff0c;供各端使用&#xff0c;目前飞书底层使用Rust编写通用组件。 该篇适合对Android、Rust了解&#xff0c;想看如何做整合&#xff0c;如果想要工程源码&#xff0c;可以评论或留言有解疑…...

vue3动态监听div高度案例

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

数据转换 | Matlab基于SP符号递归图(Symbolic recurrence plots)一维数据转二维图像方法

目录 基本介绍程序设计参考资料获取方式 基本介绍 Matlab基于SP符号递归图&#xff08;Symbolic recurrence plots&#xff09;一维数据转二维图像方法 符号递归图(Symbolic recurrence plots)是一种一维时间序列转图像的技术&#xff0c;可用于平稳和非平稳数据集;对噪声具有…...