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

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

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

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]删除
最新教程 更多>
  • 在Python中如何创建动态变量?
    在Python中如何创建动态变量?
    在Python 中,动态创建变量的功能可以是一种强大的工具,尤其是在使用复杂的数据结构或算法时,Dynamic Variable Creation的动态变量创建。 Python提供了几种创造性的方法来实现这一目标。利用dictionaries 一种有效的方法是利用字典。字典允许您动态创建密钥并分...
    编程 发布于2025-05-21
  • 您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    在javascript console 中显示颜色是可以使用chrome的控制台显示彩色文本,例如红色的redors,for for for for错误消息?回答是的,可以使用CSS将颜色添加到Chrome和Firefox中的控制台显示的消息(版本31或更高版本)中。要实现这一目标,请使用以下模...
    编程 发布于2025-05-21
  • 在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    For Each Loop vs. Iterator: Efficiency in Collection TraversalIntroductionWhen traversing a collection in Java, the choice arises between using a for-...
    编程 发布于2025-05-21
  • 如何正确使用与PDO参数的查询一样?
    如何正确使用与PDO参数的查询一样?
    在pdo 中使用类似QUERIES在PDO中的Queries时,您可能会遇到类似疑问中描述的问题:此查询也可能不会返回结果,即使$ var1和$ var2包含有效的搜索词。错误在于不正确包含%符号。通过将变量包含在$ params数组中的%符号中,您确保将%字符正确替换到查询中。没有此修改,PDO...
    编程 发布于2025-05-21
  • 如何将来自三个MySQL表的数据组合到新表中?
    如何将来自三个MySQL表的数据组合到新表中?
    mysql:从三个表和列的新表创建新表 答案:为了实现这一目标,您可以利用一个3-way Join。 选择p。*,d.content作为年龄 来自人为p的人 加入d.person_id = p.id上的d的详细信息 加入T.Id = d.detail_id的分类法 其中t.taxonomy =...
    编程 发布于2025-05-21
  • 切换到MySQLi后CodeIgniter连接MySQL数据库失败原因
    切换到MySQLi后CodeIgniter连接MySQL数据库失败原因
    无法连接到mySQL数据库:故障排除错误消息要调试问题,建议将以下代码添加到文件的末尾.//config/database.php并查看输出: ... ... 回声'... echo '<pre>'; print_r($db['default']); echo '</pr...
    编程 发布于2025-05-21
  • JavaScript计算两个日期之间天数的方法
    JavaScript计算两个日期之间天数的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    编程 发布于2025-05-21
  • \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    答案: 在大多数现代编译器中,while(1)和(1)和(;;)之间没有性能差异。编译器: perl: 1 输入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    编程 发布于2025-05-21
  • 为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    查询模式实现缺失:解决“无法找到”错误在Silverlight应用程序中,尝试使用LINQ建立LINQ连接以错误而实现的数据库”,无法找到查询模式的实现。”当省略LINQ名称空间或查询类型缺少IEnumerable 实现时,通常会发生此错误。 解决问题来验证该类型的质量是至关重要的。在此特定实例中...
    编程 发布于2025-05-21
  • C++中如何将独占指针作为函数或构造函数参数传递?
    C++中如何将独占指针作为函数或构造函数参数传递?
    在构造函数和函数中将唯一的指数管理为参数 unique pointers( unique_ptr [2启示。通过值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法将唯一指针的所有权转移到函数/对象。指针的内容被移至功能中,在操作...
    编程 发布于2025-05-21
  • 如何使用Regex在PHP中有效地提取括号内的文本
    如何使用Regex在PHP中有效地提取括号内的文本
    php:在括号内提取文本在处理括号内的文本时,找到最有效的解决方案是必不可少的。一种方法是利用PHP的字符串操作函数,如下所示: 作为替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式来搜索特...
    编程 发布于2025-05-21
  • Python中何时用"try"而非"if"检测变量值?
    Python中何时用"try"而非"if"检测变量值?
    使用“ try“ vs.” if”来测试python 在python中的变量值,在某些情况下,您可能需要在处理之前检查变量是否具有值。在使用“如果”或“ try”构建体之间决定。“ if” constructs 结果= function() 如果结果: 对于结果: #处理项...
    编程 发布于2025-05-21
  • 如何干净地删除匿名JavaScript事件处理程序?
    如何干净地删除匿名JavaScript事件处理程序?
    删除匿名事件侦听器将匿名事件侦听器添加到元素中会提供灵活性和简单性,但是当要删除它们时,可以构成挑战,而无需替换元素本身就可以替换一个问题。 element? element.addeventlistener(event,function(){/在这里工作/},false); 要解决此问题,请考虑...
    编程 发布于2025-05-21
  • 为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    使用php dateTime修改月份:发现预期的行为在使用PHP的DateTime类时,添加或减去几个月可能并不总是会产生预期的结果。正如文档所警告的那样,“当心”这些操作的“不像看起来那样直观。 考虑文档中给出的示例:这是内部发生的事情: 现在在3月3日添加另一个月,因为2月在2001年只有2...
    编程 发布于2025-05-21

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

Copyright© 2022 湘ICP备2022001581号-3