菜单

贡献指南

相关源文件

本文档概述了向 TheAlgorithms/Python 仓库贡献算法、数据结构和教育代码的全面指南。它涵盖了贡献者的责任、代码质量标准、测试要求和提交流程,以确保一致、高质量的教育内容。

有关具体的算法实现标准,请参阅算法实现标准。有关测试和验证程序,请参阅测试与验证要求

贡献者责任和协议

所有贡献者在提交代码之前必须同意基本原则。本仓库服务于全球学习者,并保持严格的教育内容质量标准。

核心贡献者协议

职责要求强制执行
原创作品禁止抄袭自动化检测 + 人工审查
许可代码根据 MIT 许可证分发合并后自动生效
质量标准必须符合样式和编码标准提交前钩子 + CI/CD 验证
教育价值代码必须用于学习目的人工审查流程

贡献者承认其作品将成为全球引用的教育资源的一部分。欢迎新的实现,但不允许与现有算法完全重复。

贡献工作流程概述

来源:CONTRIBUTING.md1-192 .github/stale.yml1-64

算法定义和要求

本仓库定义了具有特定标准的算法,以保持教育价值和跨实现的连贯性。

算法标准

算法实现必须满足以下要求

代码质量标准

本仓库通过自动化工具强制执行特定的编码标准

工具目的命令配置
pre-commit提交时自动格式化pre-commit install.pre-commit-config.yaml
black代码格式化black .Python 软件基金会标准
ruff代码检查和质量ruff check快速 Python 代码检查器
mypy类型检查mypy --ignore-missing-imports .静态类型分析

来源:CONTRIBUTING.md43-61 CONTRIBUTING.md63-75 CONTRIBUTING.md76-101 CONTRIBUTING.md162-169

代码风格和标准强制执行

Python 版本和命名约定

所有代码必须使用 Python 3.13+ 编写,并遵循既定的命名约定。

文档和测试标准

每个函数都需要全面的文档和测试

doctest 格式是强制性的,并具有双重目的

  • 文档:展示预期的使用模式
  • 测试:自动验证函数行为

来源:CONTRIBUTING.md80-85 CONTRIBUTING.md118-140 CONTRIBUTING.md162-169

文件结构和提交要求

目录结构指南

外部依赖项和库

本仓库在外部依赖项方面有特定的政策

依赖类型策略需要采取的行动
基本算法避免使用外部库使用 Python 标准库
复杂算法允许使用外部库添加到 requirements.txt
第三方模块必须有正当理由包含在提交中

来源:CONTRIBUTING.md173-175 CONTRIBUTING.md176-190

Project Euler 特定指南

由于其数学性质和自动化验证系统,Project Euler 解决方案具有额外的要求。

Project Euler 解决方案结构

示例 Project Euler 实现

仓库包含示例,例如project_euler/problem_012/sol2.py46-53,演示了正确的结构

主要特性

  • 函数名为solution()
  • 清晰的文档字符串解释了目的
  • Doctest 显示了预期的输出
  • 直接返回答案

来源:project_euler/README.md11-119 project_euler/problem_012/sol2.py1-58

自动化测试和验证管道

贡献流程集成了多个自动化系统,以确保代码质量和正确性。

GitHub Actions 工作流程集成

陈旧问题管理

本仓库使用自动化的问题管理来维护活跃的贡献环境

配置目的
多少天后变为过时30 天标记不活跃的问题/PR
多少天后关闭7 天关闭过时项
豁免标签"Status: on hold"防止自动关闭
每小时操作数5限流

来源:CONTRIBUTING.md26-39 .github/stale.yml1-64

社区和支持资源

沟通渠道

本仓库通过多种渠道维护活跃的社区支持

平台目的用途
GitHub IssuesBug 报告、功能请求技术讨论
Discord实时社区聊天快速提问、协作
Gitter算法讨论教育支持

问题管理政策

  • 不分配问题:贡献者在没有预先分配的情况下处理开放性问题
  • 专注于 Pull Request:新算法更倾向于提交 PR 而非创建问题
  • 自动关闭集成:在 PR 描述中使用 Fixes #issue_number

贡献系统强调实际实现而非理论讨论,鼓励贡献者提交可运行的代码,而不是在问题中讨论潜在的算法。

来源:CONTRIBUTING.md28-40 CONTRIBUTING.md188-191