freeCodeCamp Python 每日编程挑战精讲:Challenge 1「Vowel Balance」元音平衡问题

发布时间:2026/9/10 0:00:56

freeCodeCamp Python 每日编程挑战精讲:Challenge 1「Vowel Balance」元音平衡问题 freeCodeCamp Python 每日编程挑战精讲Challenge 1「Vowel Balance」元音平衡问题【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp本篇以 freeCodeCamp 课程库中的 Python 每日编程挑战第一题「Vowel Balance元音平衡」为主体完整解析其题目规则、7 组官方测试用例、种子代码与参考解法并结合仓库源码说明该挑战在 challengeType 体系中的定位dailyChallengePy 29以及runPython测试与 Web Worker 执行链路的底层原理。读完后你既能独立完成这道题也能理解这类题目在 freeCodeCamp 前端是如何被构建、运行与判分的。一、挑战的出处与在课程体系中的定位该题的源文件是 Vowel Balance 挑战位于课程区块daily-coding-challenges-python之下。区块结构定义在 daily-coding-challenges-python.json 中关键配置如下dashedName:daily-coding-challenges-python即区块的 URL 标识usesMultifileEditor:true使用多文件编辑器布局helpCategory:Python帮助分类归入 PythonblockLayout:legacy-challenge-list以传统挑战列表形式呈现challengeOrder数组的第一项正是本挑战id: 6814d8e1516e86b171929de4title: Challenge 1: Vowel Balance其后依次是 Challenge 2: Base Check、Challenge 3: Fibonacci Sequence 等数百道按编号排列的题目。从挑战文件的 front matter 可以看到它被标记为challengeType: 29。这一编号的定义在 challenge-types.ts 中const dailyChallengeJs 28; const dailyChallengePy 29; // 即本挑战的类型challengeType 29决定了三个行为见 challenge-types.ts维度取值含义viewTypes[29]classic复用经典代码编辑器界面左侧编辑器 右侧控制台submitTypes[29]tests通过「运行测试」按钮判分而非提交项目 URLgetDailyCodingChallengeLanguage(29)python代码本地缓存等逻辑以语言后缀区分 JS/Python 挑战其中getIsDailyCodingChallengechallenge-types.ts#L182-L188通过判断类型是否为28或29来识别「每日编程挑战」前端多处如 completion-epic.js、code-storage-epic.js据此走差异化分支。二、题目原文与规则拆解原题描述引自 挑战源文件Given a string, determine whether the number of vowels in the first half of the string is equal to the number of vowels in the second half.即给定一个字符串判断其前半部分的元音字母数量是否等于后半部分的元音字母数量。规则要点字符串可以包含任意字符数字、符号、空格均可元音定义为a、e、i、o、u这五个字母大小写均计入即AEIOU与aeiou等价若字符串长度为奇数忽略正中间的字符。设字符串长度为n则前半部分取前n // 2个字符后半部分取后n // 2个字符奇数长度时中间那个字符自然被落在两个切片之外从而被「忽略」。三、官方测试用例全集与逐例验证源文件的# --hints--段落共给出 7 组测试。这些测试以 JavaScript 包裹的形式定义每条 hint 的展示文本如 is_balanced(racecar)should returnTrue.下方附带一个通过runPython在 Python 测试环境中执行的断言({test: () { runPython( from unittest import TestCase TestCase().assertIs(is_balanced(racecar), True)) }})这里用unittest.TestCase().assertIs做同一性断言——要求返回值必须是布尔单例True/False本身而不是任意真值/假值例如返回1或yes都会失败因此解法必须显式返回布尔结果。完整用例如下表并对每一例给出按规则的切分推演half n // 2输入长度 nhalf前半部分元音数后半部分元音数期望racecar73raca1cara1TrueLorem Ipsum115Lore o,e2IpsumI,u2TrueKitty Ipsum115Kittyi1IpsumI,u2Falsestring63str0ingi1False 100见下方边界说明0Trueabcdefghijklmnopqrstuvwxyz2613a..ma,e,i3n..zo,u2False123A#b!E*456-o.U178123A#b!EA,E2*456-o.Uo,U2True这 7 组用例覆盖了奇数/偶数长度、含空格、纯字母、全字母表验证大小写元音只算a,e,i,o,u五个、以及数字与特殊符号混排验证非字母字符一律不计。其中racecar特意让元音e落在被忽略的中心位置检验「奇数长度忽略中点」规则123A#b!E*456-o.U则检验大写元音A、E、U的计数。四、种子代码与参考解法编辑器的初始种子代码# --seed--段是一个故意不实现的函数体等待学习者填充def is_balanced(s): return s仓库给出的参考解法# --solutions--段def is_balanced(s): vowels set(aeiouAEIOU) n len(s) half n // 2 first_half s[:half] second_half s[-half:] def count_vowels(sub): return sum(1 for char in sub if char in vowels) return count_vowels(first_half) count_vowels(second_half)逐行解析vowels set(aeiouAEIOU)用集合而非字符串存放 10 个大小写元音char in vowels的成员检测是 O(1) 的哈希查找相比s.lower()后只存小写这里省去了对每个字符做大小写转换的开销。half n // 2整数除法取半天然实现「奇数长度丢弃中间字符」。s[:half]与s[-half:]正负下标切片分别取前、后half个字符两段互不重叠中点字符恰好不被包含。count_vowels内部函数生成器表达式sum(1 for char in sub if char in vowels)逐字符计数是 Python 中最惯用的单趟计数写法。返回值两侧计数比较后返回布尔值满足assertIs对True/False单例的要求。边界行为补充说明两个值得注意的 Python 切片细节从参考解法的行为可以推断空字符串n 0half 0s[:0]与s[-0:]中前者为空串s[-0:]等价于s[0:]即整串仍为空串两侧元音数均为 0返回True符合直觉。长度为 1 的字符串half 0时s[-0:]等价于s[0:]会取到整个字符串而非空串。若输入是单个元音如a此实现会返回False而按「忽略中点字符」的字面规则两侧都应为 0。现有 7 组测试用例均未覆盖这一极端输入因此它不属于本题的判分范围但若自行扩展测试建议显式处理half 0的情况例如second_half s[-half:] if half else 。另一种等价写法利用元音判断的对称性也可以先把整串归一化为小写再比较或直接用一行式表达核心逻辑def is_balanced(s): v set(aeiou) s s.lower() half len(s) // 2 return (sum(c in v for c in s[:half]) sum(c in v for c in s[-half:]))sum(c in v for c in ...)利用了bool是int的子类这一特性True被求和时记为 1注意这种写法在half 0时同样存在第 2 点所述的边界行为。五、挑战的运行与判分机制源码级视角理解这道题「在哪里跑、怎么判分」可以沿仓库中的前端执行链路看识别 Python 挑战execute-challenge-saga.js 中previewChallengeSaga检查challengeData.challengeType challengeTypes.dailyChallengePy与python、pyLab等并列源码注释明确写道// Python challenges do not use the preview frame, they use a web worker // to run the code. The UI is handled by the xterm component...即 Python 类挑战不走预览 iframe而是把构建后的代码交给 Web Worker 执行控制台输出由 xterm 终端组件渲染。代码进入 WorkerupdatePreviewSaga在用户编辑后延迟 700ms 防抖调用updatePython(challengeData)经 build.ts 中的challengeHasPreview其中包含dailyChallengePy构建出buildData最终在 execute-challenge-saga.js#L409-L421 调用runPythonCode(code)把用户代码送入 Worker 求值。测试执行点击「运行测试」时submitTypes[29]为tests框架取每条 hint 中的testString即上节那些runPython(...)片段在 Python 测试帧中逐条执行。任一assertIs失败即判为未通过全部通过方可标记挑战完成完成逻辑见 completion-epic.js 中对getDailyCodingChallengeLanguage(challengeType)的使用用于按语言维度记录完成情况。数据侧的校验每日挑战在数据库中以「一天一题、含 JS/Py 双语言版本」的形式存放客户端侧用 daily-coding-challenge-validator.ts 中的 Joi schema 校验其结构必含id、challengeNumber≥1 的整数、title、date、description以及javascript与python两个语言对象每个语言对象必含teststexttestString数组与challengeFiles。这说明挑战文件中的# --hints--测试段最终就是 schema 里的tests数组元素。六、小结与延伸阅读本题的核心考点可以归纳为三点正负下标切片s[:half]/s[-half:]配合整数除法n // 2实现「奇数长度忽略中点」集合成员检测完成 O(1) 元音判定且必须同时覆盖大小写返回严格布尔值以通过unittest.TestCase().assertIs的同一性断言。若想继续深入可以从以下仓库路径入手本题源文件Vowel Balance 挑战区块结构全部挑战顺序daily-coding-challenges-python.json挑战类型注册表challenge-types.tsPython 执行链路execute-challenge-saga.js、build.ts挑战数据结构校验daily-coding-challenge-validator.ts。【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/10 0:00:56

后台管理系统设置页面开发实战:权限模型与动态路由设计

1. 系统设置页面的整体设计与思路拆解 1.1 为什么系统设置页面是后台管理系统的“地基” 很多前端新人最开始接触后台管理项目时,往往会把精力放在“看起来炫酷”的业务页面上,比如数据大屏、复杂表单、图表联动。但真正经历过几个完整项目之后&#xf…

2026/9/10 0:00:55

MATLAB读取Rinex 3.02观测文件:多系统GNSS数据解析实战

简介:基于MATLAB开发的Rinex3.02版观测文件(o文件)读取代码包,面向卫星定位导航方向的学习者与研究人员,用于解决新版观测文件的数据解析、历元提取与时间转换问题。压缩包共4个文件,包含两个m脚本、一个19…

2026/9/10 0:00:55

Leaflet离线地图完整Demo合集:内网部署与坐标纠偏实战

简介:这是一份面向Web GIS开发者的LeafLet离线地图示例合集,帮助开发者快速掌握离线地图从搭建到交互的完整流程。压缩包共723个文件,大小14.06MB,以319个js脚本、175个html页面和29个css样式文件为主体,配合png/svg图…

2026/9/10 2:41:14

SpringBoot旅游管理系统毕业设计:从技术选型到部署上线

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/10 2:41:14

Unigram频道运营指南:如何高效管理你的Telegram频道

Unigram频道运营指南:如何高效管理你的Telegram频道 想要在Telegram上建立成功的频道?Unigram作为Windows平台上的Telegram客户端,提供了强大的频道管理功能。本指南将带你掌握Unigram频道运营的核心技巧,让你的频道脱颖而出&…

2026/9/10 2:41:14

Unigram数据存储架构:本地数据库与云端同步的实现原理

Unigram数据存储架构:本地数据库与云端同步的实现原理 Unigram作为Windows平台上的Telegram客户端,其数据存储架构采用了本地数据库与云端同步的巧妙设计,确保用户数据既安全又实时可用。在本文中,我们将深入探讨Unigram如何通过S…

2026/9/9 13:11:35

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/8 7:15:15

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 0:00:55

目录对比去重实战:用哈希算法精准清理重复文件

我电脑里现在还有一块换了三次机的“数据墓地”硬盘,里面存着2016年以前所有旧笔记本的完整备份。平时不觉得有什么,直到前阵子想把它整理归档,发现同一个安装包、同一批照片、同一份论文草稿,在几个不同的备份目录里反复出现。更…

2026/9/10 0:00:55

Leaflet离线地图完整Demo合集:内网部署与坐标纠偏实战

简介:这是一份面向Web GIS开发者的LeafLet离线地图示例合集,帮助开发者快速掌握离线地图从搭建到交互的完整流程。压缩包共723个文件,大小14.06MB,以319个js脚本、175个html页面和29个css样式文件为主体,配合png/svg图…

2026/9/10 0:00:55

MATLAB读取Rinex 3.02观测文件:多系统GNSS数据解析实战

简介:基于MATLAB开发的Rinex3.02版观测文件(o文件)读取代码包,面向卫星定位导航方向的学习者与研究人员,用于解决新版观测文件的数据解析、历元提取与时间转换问题。压缩包共4个文件,包含两个m脚本、一个19…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/9 10:21:54

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码