用户输入一个表示星期几的数字 Python

在日常编程中,处理用户输入是一个常见且重要的任务。本篇博文将探讨如何使用 Python 编写一个简单的程序,来根据用户输入的数字返回对应的星期几。整个过程将展示从初始技术痛点到最终解决方案的演进。

背景定位

在最初的需求中,用户输入一个数字(0到6)来表示星期几的程序却面临着一些挑战。我们需要考虑用户输入的有效性、程序的 extensibility 以及用户的交互体验。以下是这个阶段的一些关键指标和概念示例。

Mermaid 时间轴展示了我们在过去一段时间中的业务增长里程碑。

timeline
    title 业务增长里程碑
    2019-01 : 初始版本发布
    2020-06 : 新功能上线
    2021-03 : 用户反馈收集
    2022-09 : 系统优化升级

四象限图则用来分析我们在技术部署中的债务分布,帮助我们更好地理解当前的痛点。

quadrantChart
    title 技术债务分布
    x-axis 用户痛点
    y-axis 技术复杂度
    "功能不全" : [0.2,0.8]
    "易用性差" : [0.8,0.2]
    "设计不优" : [0.5,0.5]
    "逻辑复杂" : [0.7,0.7]

演进历程

随着时间的推移,我们逐渐意识到我们的初始设计需求并不足够。架构迭代的阶段贯穿于我们整个开发过程。这里使用甘特图展示技术演进时间线,突显每个阶段的任务及其交付。

gantt
    title 技术演进时间线
    dateFormat  YYYY-MM-DD
    section 初始设计
    收集需求           :a1, 2022-01-01, 30d
    设计原型           :after a1  , 30d
    section 功能扩展
    构建核心功能      :2022-03-01 , 90d
    用户反馈评估     :after a1  , 60d
    section 系统优化
    执行代码重构      :2022-06-15, 30d
    上线新的结构      :2022-07-15, 30d

架构设计

为确保程序的高可用性,我们设计了一套高可用方案。以下流程图展示了请求处理链路,从用户输入到输出结果的整个过程。

flowchart TD
    A[用户输入] --> B{输入是否有效?}
    B -- 是 --> C[返回对应星期几]
    B -- 否 --> D[提示输入有效数字]
    C --> E[程序结束]
    D --> A

为了让大家更清楚系统的上下文,这里还给出了 C4 架构图。

C4Context
    title 系统上下文
    Person(user, "用户", "输入一个数字")
    System(system, "星期几返回系统", "返回对应的星期几")
    System_Ext(system_db, "数据库", "存储星期的相关信息")
    Rel(user, system, "输入数字")
    Rel(system, system_db, "查询数据库")

性能攻坚

为了提升程序的性能,我们实施了一些调优策略。在这里,我展示一个用于计算 QPS 的模型。

QPS = \frac{Total\ Requests}{Total\ Time\ in\ Seconds}

状态图显示了在出现高负载时的熔断降级逻辑。

stateDiagram
    [*] --> 正常运行
    正常运行 --> 高负载 : 请求超出
    高负载 --> 降级模式 : 开始熔断
    降级模式 --> 正常运行 : 执行恢复

故障复盘

在开发过程中,我们遇到了一些重大事故。例如,某次部署后,程序不能正常返回星期信息。通过下方的时间序列图,我们分析故障扩散路径。

sequenceDiagram
    participant User as 用户
    participant App as 程序
    participant DB as 数据库
    User->>App: 输入数字
    App-->>DB: 查询数据库
    DB-->>App: 返回错误
    App-->>User: 返回错误提示

以下是修复这个问题的代码块。

def get_weekday(num):
    weekdays = ["星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]
    if 0 <= num <= 6:
        return weekdays[num]
    else:
        raise ValueError("请输入0到6的数字")

try:
    num = int(input("请输入一个数字(0-6): "))
    print(get_weekday(num))
except ValueError as e:
    print(e)

复盘总结

在这个项目的每个阶段,我们积累了许多宝贵的经验。通过分析不同的技术及其效果,我们可以总结出它们的成本与效益。

| 技术           | 成本      | 效益       |
|----------------|-----------|------------|
| 基本输入验证   | 低        | 重要      |
| 数据库查询     | 中        | 稳定性好 |
| 跨容错机制     | 高        | 可扩展性强 |

随着开发的进行,我愈发意识到,良好的代码设计和架构决策不仅能帮助我们解决问题,更能让我们在日后的版本迭代中游刃有余。