每日一题遇到沙比题目——Python实现PAT甲级1061 Dating(举一反三+思想解读+逐步优化)


一个认为一切根源都是“自己不够强”的INTJ

个人主页:用哲学编程-优快云博客
专栏:每日一题——举一反三
Python编程学习
Python内置函数

Python-3.12.0文档解读

目录

吐槽题目

我的写法

代码分析

1. 输入处理

2. 变量初始化

3. 查找星期几和小时

4. 查找分钟

5. 输出结果

时间复杂度

空间复杂度

总结

我要更强

优化后的代码

优化分析

时间复杂度

空间复杂度

哲学和编程思想

1. KISS(Keep It Simple, Stupid)

2. DRY(Don't Repeat Yourself)

3. 提前退出(Early Exit)

4. 最小化状态(Minimize State)

5. 空间换时间(Space-Time Tradeoff)

6. 高内聚低耦合(High Cohesion and Low Coupling)

7. 单一职责原则(Single Responsibility Principle, SRP)

8. 最小惊讶原则(Principle of Least Astonishment)

举一反三

1. 简化设计

2. 消除重复

3. 提前退出

4. 最小化状态

5. 空间换时间

6. 高内聚低耦合

7. 单一职责原则

8. 最小惊讶原则



 题目链接


吐槽题目


这道题描述有问题,小时数应该是找到第一个共有的大写字母之后的那个共有字符而不是题目所描述的第二个共有字符。让我浪费1小时,无语!!!!!

我的写法

import sys

# 读取标准输入
input = sys.stdin.read

# 去除输入数据的前后空白,并按空白字符分割成列表
data = input().strip().split()

# 将输入的四个字符串分别赋值给 first_str、second_str、third_str 和 fourth_str
first_str = data[0]
second_str = data[1]
third_str = data[2]
fourth_str = data[3]

# 初始化存储星期几、小时和分钟的变量
weekday = ""
hour = ""
minute = ""

# 定义一个列表,包含星期一到星期日的缩写
days = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"]

# 布尔变量,用于指示是否已找到第一个匹配的大写字母
found_first = False

# 遍历 first_str 和 second_str 中每个字符的位置(长度取两者的最小值)
for i in range(min(len(first_str), len(second_str))):
    # 如果两个字符串在某位置的字符相同
    if first_str[i] == second_str[i]:
        # 如果还未找到第一个大写字母且该字符在 'A' 到 'G' 之间
        if not found_first and 'A' <= first_str[i] <= 'G':
            # 将 weekday 设为相应的星期几(通过 days 列表和字符的 ASCII 码计算得出)
            weekday = days[ord(first_str[i]) - ord('A')]
            # 更新 found_first 为 True
            found_first = True
        # 如果已找到第一个大写字母
        elif found_first:
            # 如果该字符是数字 '0' 到 '9' 之间,将其转换为整数并赋值给 hour
            if '0' <= first_str[i] <= '9':
                hour = int(first_str[i])
                break
            # 如果该字符是 'A' 到 'N' 之间,将其转换为对应的小时值并赋值给 hour(通过字符的 ASCII 码计算得出)
            elif 'A' <= first_str[i] <= 'N':
                hour = 10 + ord(first_str[i]) - ord('A')
                break

# 遍历 third_str 和 fourth_str 中每个字符的位置(长度取两者的最小值)
for i in range(min(len(third_str), len(fourth_str))):
    # 如果两个字符串在某位置的字符相同且该字符是字母
    if third_str[i] == fourth_str[i] and third_str[i].isalpha():
        # 将该位置的索引赋值给 minute
        minute = i
        break

# 打印结果,格式为 星期几 小时:分钟,小时和分钟都以两位数显示(不足两位的前面补零)
print(f"{weekday} {hour:02d}:{minute:02d}")

这段代码的主要功能是从四个输入字符串中解析出一个特定的时间信息,其中包括星期几、小时和分钟。代码的实现步骤包括:

  1. 读取输入数据并进行预处理。
  2. 初始化存储星期几、小时和分钟的变量。
  3. 通过遍历前两个字符串来确定星期几和小时。
  4. 通过遍历后两个字符串来确定分钟。
  5. 最终输出格式化的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

用哲学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值