青训营结营作品:解析数字串中的圆圈数量 | 豆包MarsCode AI 刷题

74 阅读2分钟

青训营结营作品:解析数字串中的圆圈数量

引言

在完成青训营的学习旅程之际,我选择了一个有趣且实用的小项目作为我的结营作业。这个项目要求我们设计一个函数来计算给定字符串中数字所包含的“圆圈”数量。通过这个小项目,不仅能够回顾和运用Python编程的基础知识,还能加深对字符串处理、字典应用以及函数定义的理解。接下来,让我们一起看看如何实现这一功能。

问题描述

假设你得到了一串仅由数字组成的字符串。任务是计算这串数字中包含了多少个“圆圈”。这里的规则如下:

  • 数字0、6、9各含有1个圆圈。
  • 数字8含有2个圆圈。
  • 其他数字不含有任何圆圈。

例如:

  • 输入 "1234567890" 应返回 5(因为6、9、0各含1个圆圈,8含2个)。
  • 输入 "8690" 同样返回 5
  • 对于输入 "1111",则返回 0,因为它不含任何有圆圈的数字。

解决方案

为了高效地解决这个问题,我们可以使用Python字典来映射每个数字到其对应的圆圈数量,并通过遍历输入字符串来累计总圆圈数。下面是具体的实现代码:

def solution(s: str) -> int:
    # 定义每个数字与它所含有的圆圈数量之间的对应关系
    circles = {
        '0': 1, '6': 1, '9': 1,
        '8': 2,
        '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '7': 0
    }
    
    # 使用列表推导式结合sum()函数计算总的圆圈数量
    total_circles = sum(circles[digit] for digit in s)
    
    return total_circles

# 测试用例验证
if __name__ == '__main__':
    print(solution("1234567890") == 5)  # 输出应为 True
    print(solution("8690") == 5)        # 输出应为 True
    print(solution("1111") == 0)        # 输出应为 True

这段代码首先定义了一个字典 circles 来存储每个数字及其对应的圆圈数量。然后,利用Python的列表推导式和内置函数 sum() 来快速计算整个字符串中所有数字所含圆圈的总数。最后,通过几个测试案例确保了我们的函数正确无误。

结语

通过这个小小的练习,我们不仅复习了Python的基本语法结构,还学会了如何利用数据结构(如字典)来简化问题解决过程。希望这篇博客能够帮助大家更好地理解如何将理论知识应用于实际编程问题之中。感谢青训营提供的学习机会,期待未来继续探索更多有趣的编程挑战!