”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 逻辑和编程练习(解决方案):方法和优化

逻辑和编程练习(解决方案):方法和优化

发布于2024-08-22
浏览:389

Ejercicios de logica y programacion (oluciones): Enfoques y Optimización

鉴于此练习:(来自 codewars.com)

创建一个返回数字每位数字的平方的函数。

例如,输入函数时,数字702应返回4904,因为7的平方是49,0的平方是0 2 的平方是 4。如果函数接收到零,则必须返回 0。

本练习的根本挑战是逐位遍历整数并以另一个整数形式返回结果。

就像编程中的所有事情一样,可以通过多种方式解决这个练习。首先,让我们使用Python中的数字操作属性来解决它,然后我将解释另一种更高级的方法?.

def square_digits(num):
    if num == 0:
        return 0
    result = ""
    while num > 0:
        num_sqr = (num % 10) ** 2 
        num = num // 10
        result = str(num_sqr)   result 
    return int(result)

在此代码中,我们首先评估是否接收到 0 以返回 0,如语句中所示。然后,我们将变量 result 初始化为空字符串,创建一个条件 num > 0 的 while 循环。我们定义变量 num_sqr,它是收到的每个数字的平方。使用 num % 10,我们获得收到的数字的最后一位数字,然后将其与 **2 进行平方。

  • 使用 num % 10 是提取数字最后一位数字的常用方法。

  • 表达式 num = num // 10 删除数字的最后一位数字,向前移动到每个数字。

解决该问题的另一种方法是将数字转换为字符串,并使用 for 循环遍历该字符串:

def square_digits(num):
    result = ""
    for digit in str(num):
        result  = str(int(digit)**2)
    return int(result)

这段代码更加优化,行数更少,遍历也很好理解,并且不需要评估是否收到 0。在 Python 中,可以使用 for 循环逐个字符地遍历字符串。我们使用此功能循环接收到的数字,并使用 str(num) 将其转换为字符串。我们将变量 result 创建为一个空字符串,其中将连接一个字符,该字符是数字转换为整数并提高到 2 的结果,全部转换为字符串。然后,我们返回转换为整数的结果。

  • 对于非常大的数字,在循环内连接字符串可能性能效率较低,但对于大多数用例来说是完全可以接受的。

*更高级和“优雅”的方式*是使用生成器理解和.join motodo。我首先向您展示代码,然后我们将对其进行分解并解释这些术语。

def square_digits(num):
    return int(''.join(str(int(digit)**2) for digit in str(num)))

如果您不了解这些概念,第一个代码的可读性就不是很好
组成它。

str(num) 中的 digital 的表达式 str(int(digit)**2) 是一个 _generator _(Generator Expression),它迭代数字 num 的字符串表示形式中的每个数字。
对于每个数字,它将其转换为整数 (int(digit)),对其进行平方 (**2),然后将其转换回字符串 (str(...))。然后,使用 ''.join(...) 获取一个序列(在本例中为生成器)并将所有元素连接成一个字符串。这里,所有的平方数字被组合成一个没有任何分隔符的字符串(因为单引号之间的字符串是空'')。

正如我们所见,解决练习的不同方法展示了语言的知识水平。如果通过测试,所有解决方案都是正确的,但有些解决方案比其他解决方案更高效且更具可读性。方法的选择取决于具体情况以及每种情况的优先顺序:

  • 可读性:当其他开发人员要阅读和维护您的代码时,这一点至关重要。清晰、易于理解的代码可以减少出错的可能性并使其更易于维护。 ?

  • 效率:在处理大量数据或在性能至关重要的应用程序中很重要。更优化的代码可以在速度和资源消耗方面产生很大的差异。 ?

  • 简单性:适用于优先考虑快速直接解决问题的情况,例如在原型或教学练习中。简单性通常使代码调试和测试变得更容易。 ?

开发时,重要的是在这些考虑因素之间找到平衡,使解决方案适应项目或任务的特定需求。

版本声明 本文转载于:https://dev.to/jpinodev/ejercicios-de-logica-y-programacion-enfoques-y-optimizacion-aka?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    在时间戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源于遗留实现的关注,这些限制需要对当前的_timestamp功能进行特定的实现。 创建表`foo`( `Productid` int(10)unsigned not n...
    编程 发布于2025-03-13
  • 如何干净地删除匿名JavaScript事件处理程序?
    如何干净地删除匿名JavaScript事件处理程序?
    删除匿名事件侦听器将匿名事件侦听器添加到元素中会提供灵活性和简单性,但是当要删除它们时,可以构成挑战,而无需替换元素本身就可以替换一个问题。 element? element.addeventlistener(event,function(){/在这里工作/},false); 要解决此问题,请考虑...
    编程 发布于2025-03-13
  • 如何从sqlite表中删除一列?
    如何从sqlite表中删除一列?
    修改SQLite表:删除列 问题: 尝试使用以下查询从SQLite数据库表中删除一列: ALTER TABLE table_name DROP COLUMN column_name; 但是,没有成功。解决方法是什么? 答案: 在SQLite 3.35.0 (2021-03-12) 之前的版本中,不...
    编程 发布于2025-03-13
  • 如何使用替换指令在GO MOD中解析模块路径差异?
    如何使用替换指令在GO MOD中解析模块路径差异?
    在使用GO MOD时,在GO MOD 中克服模块路径差异时,可能会遇到冲突,其中3个Party Package将另一个PAXPANCE带有导入式套件之间的另一个软件包,并在导入式套件之间导入另一个软件包。如回声消息所证明的那样: go.etcd.io/bbolt [&&&&&&&&&&&&&&&&...
    编程 发布于2025-03-13
  • 如何使用组在MySQL中旋转数据?
    如何使用组在MySQL中旋转数据?
    在关系数据库中使用mySQL组使用mySQL组进行查询结果,在关系数据库中使用MySQL组,转移数据的数据是指重新排列的行和列的重排以增强数据可视化。在这里,我们面对一个共同的挑战:使用组的组将数据从基于行的基于列的转换为基于列。 Let's consider the following ...
    编程 发布于2025-03-13
  • Python读取CSV文件UnicodeDecodeError终极解决方法
    Python读取CSV文件UnicodeDecodeError终极解决方法
    在试图使用已内置的CSV模块读取Python中时,CSV文件中的Unicode Decode Decode Decode Decode decode Error读取,您可能会遇到错误的错误:无法解码字节 在位置2-3中:截断\ uxxxxxxxx逃脱当CSV文件包含特殊字符或Unicode的路径逃...
    编程 发布于2025-03-13
  • 内部联接是否覆盖了外部连接的零值?
    内部联接是否覆盖了外部连接的零值?
    [2 了解内部和外部连接在SQL 复杂的SQL查询经常使用多个联接操作,结合了不同的联接类型。 一个关键的考虑因素是,当随后应用内部连接时,null值的包含(外部连接的特征)如何受到影响。如何影响外部加入结果 的性质,仅在让我们检查一个方案: 选择 * 来自人 左加入地址。 内部加入电子邮件per...
    编程 发布于2025-03-13
  • Go Web服务器:安全释放特权端口绑定后的权限方法
    Go Web服务器:安全释放特权端口绑定后的权限方法
    在GO(v1.7)在早期版本中,利用syscall.setuid()丢弃特权将返回“不支持”。作为替代方案,可以使用iPtables将80转移到非特权端口。但是,该解决方案通过允许非root进程模拟Web服务器来打开安全漏洞。该解决方案在于使用GO的网络和系统呼叫功能的组合。打开特权端口并确定UI...
    编程 发布于2025-03-13
  • 在C#中创建和写入文件时,如何防止文件碰撞?
    在C#中创建和写入文件时,如何防止文件碰撞?
    [2 [2 如果已经访问了目标文件,则创建和写入C#中的文件可能会导致错误。 即使使用在尝试使用创建它们之前,通常也会发生这种情况。 后续写操作(例如)然后抛出异常。 通用解决方案涉及关闭由 在这种情况下,这不是理想的。 一种更有效,更强大的方法是直接使用 file.writealltext...
    编程 发布于2025-03-13
  • 如何查询Zabbix以显示主机 - 网板关系?
    如何查询Zabbix以显示主机 - 网板关系?
    查询以在zabbix 中查询此查询有助于从zabbix表中检索数据,以显示hosts hosts使用特定模板。挑战在于事实是,主机和模板都存储在同一张表中,与诸如主机11813之类的ID和模板的11815混合在一起。解决此问题,我们介绍了hosts_templates表格,该表通过主机和模板之间的连...
    编程 发布于2025-03-13
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-03-13
  • 哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    在Python Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a path object to represent the polygon.它...
    编程 发布于2025-03-13
  • 可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    [2这里: https://webthemez.com/demo/sticky-multi-header-scroll/index.html </main> <section> { display:grid; grid-template-...
    编程 发布于2025-03-13
  • 我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    将我的加密库从mcrypt升级到openssl 问题:是否可以将我的加密库从McRypt升级到OpenSSL?如果是这样,如何?答案:是的,可以将您的Encryption库从McRypt升级到OpenSSL。可以使用openssl。附加说明: [openssl_decrypt()函数要求iv参...
    编程 发布于2025-03-13

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3