用户输入一个表示星期几的数字 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)
复盘总结
在这个项目的每个阶段,我们积累了许多宝贵的经验。通过分析不同的技术及其效果,我们可以总结出它们的成本与效益。
| 技术 | 成本 | 效益 |
|----------------|-----------|------------|
| 基本输入验证 | 低 | 重要 |
| 数据库查询 | 中 | 稳定性好 |
| 跨容错机制 | 高 | 可扩展性强 |
随着开发的进行,我愈发意识到,良好的代码设计和架构决策不仅能帮助我们解决问题,更能让我们在日后的版本迭代中游刃有余。
















